`
zwt2001267
  • 浏览: 444739 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate的检索方式(三)

 
阅读更多

转自:http://aumy2008.blogbus.com/logs/13941318.html

 

三、连接查询

HQLQBC支持的各种连接类型

在程序中指定的链接查询类型

HQL语法

QBC语法

使用范围

内连接

inner join 或者 join

Criteria.createAlias()

适用于有关联的持久化类,并且在映射文件中对这种关联关系作了映射。

迫切内连接

inner join fetch 或者 join fetch

不支持

隐式内连接

 

不支持

左外连接

left outer join 或者 left join

不支持

迫切左外连接

left outer join fetch 或者 left join fetch

FetchMode.EAGER

右外连接

right outer join 或者 right join

不支持

交叉连接

ClassA,ClassB

不支持

适用于不存在关联关系的持久化类

 

1、默认情况下关联级别的运行时检索策略

       采用配置文件中设置的检索策略,但有一个例外,那就是HQL会忽略映射文件设置的迫切左外连接策略,改用立即检索。

 

2、迫切左外连接

       显式指定对象的关联关系为迫切左外连接检索策略,可以覆盖映射文件中指定的检索策略。

HQL

"from Customer c left join fetch c.orders o where c.name like 't%'"

+" o.name like 't%'"

QBC

    List reslut=session.createCriteria(Customer.class)    .setFetchMode("orders",FetchMode.EAGER)    .add(Expression.like("name","t",MatchMode.START))

    .list();

 

       当使用迫切左外连接检索策略时,查询结果中可能会包含重复元素,可以通过一个HashSet来过滤重复元素:List result=….list();  HashSet set=new HashSet(result);

       Hibernate允许在一条查询语句中迫切左外连接多个多对一或一对一关联的类。

     List reslut=session.createCriteria(A.class)     .setFetchMode("this.b",FetchMode.EAGER)     .setFetchMode("this.c",FetchMode.EAGER)     .add(Expression.isNotNull("this.b"))     .add(Expression.isNotNull("this.c"))

     .list();

 

       当存在传递关联时,可以通过HQL来同时迫切左外连接关联类和依赖关联类,但QBC无法表达这种形式的迫切左外连接。

 

3、左外连接

       使用左外连接查询时,将根据映射文件的配置来决定关联的检索策略。

 

4、内连接

       QBC也支持内连接查询

     List reslut=session.createCriteria(Customer.class)     .add(Expression.like("name","t",MatchMode.SRART))     .createCriteria("orders")     .add(Expression.like("orderNumber","t",MatchMode.SRART))

     .list();

       默认情况下,QBC只检索出Customer对象,以上代码等同于以下HQL查询语句:

"select c from Customer c join  c.orders o where c.name like 't%'"

              + " and o.orderNumber like 't%'";

 

       createAlias()方法为关联属性(集合)赋予别名。如果希望QBC返回的集合也包含成对的CustomerOrder对象,可以调用returnMaps()方法:

     List reslut=session.createCriteria(Customer.class)     .createAlias("orders","o")     .add(Expression.like("this.name","t",MatchMode.SRART))     .add(Expression.like("o.orderNumber","t",MatchMode.SRART))     .returnMaps()

     .list();

 

       采用内连接查询时,HQLQBC有不同的默认行为,前者检索成对的对象,后者仅检索出要检索的单个对象(不包含关联的对象)。

 

5、迫切内连接

       显式指定对象的关联关系为迫切内连接检索策略,可以覆盖映射文件中指定的检索策略。

 

6、隐式内连接

一对一

"from Cunstomer c where c.homeAddress.provice like '%hai%'"

      List reslut=session.createCriteria(Customer.class)     .add(Expression.like("homeAddress.provice","t",MatchMode.SRART))

     .list();

 

多对一

"from Order o where o.customer.name like '%hai%'"

QBC 不支持隐式内连接,下边是不正确的,:

     List reslut=session.createCriteria(Order.class)     .add(Expression.like("customer.name","t",MatchMode.SRART))

     .list();

对于QBC,必须显式指定内连接查询:

     List reslut=session.createCriteria(Order.class)     .createAlias("customer","c")     .add(Expression.like("c.name","t",MatchMode.SRART))

     .list();

 

一对多或多对多

       隐式内连接不适用。

 

7、右外连接

 

8、使用SQL风格的交叉连接和隐式内连接

       HQL支持SQL风格的交叉连接查询。如: from Customer c, Order o

 

       SQL语言中,显式内连接查询的语句使用inner join关键字,并且用on字句设定连接条件,形式为:

"select * from CUSTOMER c inner join ORDER o on c.ID=o.CUSTOMER_ID"

       隐式内连接查询语句不包含关键字阿,并且用where字句设定连接条件:

"select * from CUSTOMER c ,ORDER o where c.ID=o.CUSTOMER_ID"

 

9、关联级别运行是的检索策略

1)没有显式指定,使用配置文件的,但有一个例外,那就是HQL会忽略映射文件设置的迫切左外连接策略,改用立即检索。

2)如果显式指定,就会覆盖映射文件配置的检索策略。在HQL查询语句中显式指定检索策略包括以下内容。

l         left join fetch

l         inner join fetch

QBC通过FetchMode类来显式指定检索策略,有以下3个静态实例。

l         FetchMode.DEFAULT:默认,采用配置;

l         FetchMode.EAGER:覆盖,指定迫切左外连接检索策略;

l         FetchMode.LAZY:覆盖映射配置文件的检索策略,在程序中指定延迟检索策略。

分享到:
评论

相关推荐

    day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询

    本教程将深入探讨"day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询"的主题,通过源码分析和实际工具的应用,来提升数据库查询的效率。 首先,我们了解Hibernate的检索方式。在Hibernate中,...

    day36 04-Hibernate检索方式:多表连接查询

    标题中的“day36 04-Hibernate检索方式:多表连接查询”表明这是一个关于Hibernate框架的教程,重点讲解如何在Hibernate中进行多表连接查询。在这个主题中,我们将深入探讨Hibernate的ORM(对象关系映射)机制以及...

    HIBERNATE检索策略

    标题:“HIBERNATE检索策略” 描述:本文深入解析了HIBERNATE的检索策略,为读者提供了一条清晰的学习路径,重点分析了HIBERNATE中的抓取策略及其应用场景,帮助开发者更有效地管理和优化数据加载过程。 在...

    Hibernate的检索方式

    #### 三、HQL检索方式 HQL(Hibernate Query Language)是一种面向对象的查询语言,它类似于SQL但更加面向对象。通过HQL,可以编写类似SQL的查询语句来检索对象。 **特点**: - **面向对象**:查询结果自动转换为...

    Hibernate检索方式

    ### Hibernate检索方式详解 #### 一、概述 Hibernate是一个强大的对象关系映射(ORM)框架,它可以将Java对象与数据库表进行映射,使得开发者能够更方便地进行数据的持久化操作。在Hibernate中,提供了多种检索...

    hibernate5--4.检索方式及策略

    一、Hibernate检索方式 1. **HQL(Hibernate Query Language)**: HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但它是基于类和对象的。你可以通过HQL来查询、更新和删除对象,而无需关心底层的SQL语法。...

    java-Hibernate 检索

    Hibernate 是一个流行的 Java 持久层框架,它提供了多种检索数据的方式,包括导航对象图检索、OID 检索、HQL 检索、QBC 检索和本地 SQL 检索等。下面将详细介绍每种检索方式。 一、导航对象图检索 导航对象图检索...

    Hibernate数据检索(HQL)笔记

    ### Hibernate数据检索(HQL)知识点详解 #### 一、简介 Hibernate 是一款开源的对象关系映射(ORM)框架,它允许开发人员将 Java 对象映射到数据库表中的记录,从而极大地简化了数据访问层的开发工作。本文档基于...

    Hibernate数据检索(HQL)笔记

    在 Hibernate 中,数据检索可以使用 HQL 语句或 Criteria API 两种方式。HQL 语句是一种类似 SQL 的查询语言,用于定义查询条件和检索数据,而 Criteria API 则是一种基于对象的查询接口,用于构建查询条件和检索...

    基于Spring的Hibernate Search全文检索功能示例

    **三、实现全文检索** 1. **构建查询**:使用`FullTextSession`的`createFullTextQuery`方法,传入一个Lucene的查询字符串,生成一个全文检索查询。 2. **执行查询**:调用`List`或`ScoredResult`方法执行查询,并...

    浪磬J2EE第一期 Hibernate专题 第六讲 检索方式

    一、Hibernate检索方式概述 Hibernate提供了多种检索数据的方法,以适应不同的需求场景。这些方法包括:HQL(Hibernate Query Language)、QBC(Query By Criteria)、Criteria API以及直接使用Session的get()和load...

    Hibernate的检索策略

    #### 三、关联级别检索策略 关联级别检索策略是指当加载实体之间的一对多或多对多关联时,如何处理这些关联关系的加载。关联级别的检索策略主要关注于实体之间的关系加载,如一对多、多对多等。 ##### 1. Join ...

    hibernate基础 注解开发 检索

    Hibernate提供了多种方式来查询数据,包括HQL、QBC和本地SQL。 - **HQL (Hibernate Query Language)**:一种面向对象的查询语言,类似于SQL但更加面向对象。 - **QBC (Query By Criteria)**:基于标准的API提供了一...

    Hibernate 对象的状态检索

    本人在厦门邦初培训时候 使用的快速入门精简文档 Session缓存的作用 Session清理缓存的时间点 对象的临时状态、持久状态和游离状态 用session的update()方法使游离对象转变为持久化对象。...本地SQL检索方式

    hibernate的检索

    【Hibernate检索策略】 Hibernate提供三种主要的检索策略:立即检索、延迟检索和迫切左外连接检索。 1. **立即检索**:这种策略将立即加载关联的对象,无论对象是持久化状态还是游离状态。优点是应用程序可以方便...

    使用 hibernate-search 实现全文检索及文档管理的例子

    **使用Hibernate Search实现全文检索及文档管理** 在Java开发中,全文检索和文档管理是常见的需求,特别是对于大型的企业级应用。Hibernate Search是Hibernate ORM框架的一个扩展,它提供了对数据库中的对象进行...

    hibernate的延迟检索在轻量级J2EE框架中的应用

    通过这种方式,只有当确实需要访问集合中的数据时,Hibernate才会执行数据库查询,从而节省了资源。 #### 3. 延迟加载在轻量级J2EE框架中的应用 在轻量级J2EE框架中,如Spring+Hibernate,延迟加载机制的应用非常...

    hibernate3 hibernate3

    三、Hibernate3的应用 1. 配置:在项目中,我们需要配置Hibernate的连接参数,包括数据库URL、用户名、密码等,以及实体类和数据库表的映射信息。 2. 实例化SessionFactory:SessionFactory是线程安全的,通常在...

Global site tag (gtag.js) - Google Analytics