知识大全 hibernate连接查询总结

Posted 属性

篇首语:壮心未与年俱老,死去犹能作鬼雄。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 hibernate连接查询总结相关的知识,希望对你有一定的参考价值。

  假使现在有两张关联表 customer和order 一般情况下是一个customer可以对应多个order 而一个order只能对应一个customer 那么order中会有个customer对象作为属性 hbm中会有个many to one 而customer中 会有一个set<Order> hbm中会有一个one to may

  下面我们研究下在各种连接方式下的查询的策略及结果 并对其归纳总结

  第一 无连接

  hql from Customer cwhere c name like T%

  说明 以上语句未显示指定其关联的order

  执行的sql select * from customer  wherename like T%

  查询结果为

  Id

  Name

  Age

  

  Tom

  

  

  Tom

  

  结果 结果中包含两个customer的对象元素 他们分别对应id是 和 的两条数据 他们的order集合属性均未被初始化

  第二 迫切左外连接

  hql from Customer c leftjoin fetch c order where c name like T%

  说明 显示指定查询某人对应的order属性

  执行的sql select c C_ID c NAME o ID o ORDER_NUMBER o CUSTOMER_ID

  From CUSTOMER c left out join ORDER o onc ID=o CUSTOMER_ID  where (c NAME like T% )

  查询结果为

  C_ID

  NAME

  AGE

  O_ID

  O_NUMBER

  CUSToMER_ID

  

  tom

  

  

  Tom_order

  

  

  tom

  

  

  Tom_order

  

  

  tom

  

  

  Tom_order

  

  

  tom

  

  null

  null

  null

  结果 以左表为基础 查询所有T开头的用户的对应的order 当用户无订单时 其order属性用null填充

  (注 hibernate允许一条查询迫切左外连接到多个 多对一或者一对一的关联表 比如A表中有一个字段bId 一个字段cId 而分别存在一个B表和C表 两者的id分别是A的属性 那么他们在进行迫切左外连接时 语句为 from A a left join fetch a b b left join fetch a c c where b is notnull and c is not null 或者第二种情况为A中有bId B中有cId C表不与其他表关联 那么他们的语句为 from A a left join fetch a b b left join fetch b c where b is notnull and c is not null)

  第三 左外连接

  hql: from Customer c left join c orderwhere c name like T%

  说明 显示指定查询某人对应的order属性

  执行的sql select c ID C_ID c NAME c AGE o ID O_ID o ORDER_NUMBER o CUSTOMER_ID  from CUSTOMER c left outer join ORDERS  o on c ID=o CUSTOMER_ID where (c NAME like T% )

  查询结果为

  C_ID

  NAME

  AGE

  O_ID

  ORDER_NUMER

  CUSTOMER_ID

  

  Tom

  

  

  Tom_order

  

  

  Tom

  

  

  Tom_order

  

  

  Tom

  

  

  Tom_order

  

  

  Tom

  

  null

  null

  null

  第四 内连接

  hql: from Customer c inner join c orders owhere c name like T%

  执行的sql语句 select c ID C_ID c NAME c AGE o ID O_ID o ORDER_NUMBER o CUSTOMER_IDfrom CUSTOMER c inner join ORDERS o on c ID=o CUSTOMER_ID   where (c NAME like T% )

  查询结果为

  C_ID

  NAME

  AGE

  O_ID

  ORDER_NUMBER

  CUSTOMER_ID

  

  Tom

  

  

  Tom_order

  

  

  Tom

  

  

  Tom_order

  

  

  Tom

  

  

  Tom_order

  

  第五 迫切内链接

  hql from Customer cinner join fetch c orders o where c name like T%

  执行的sql select c ID C_ID c NAME c AGE o ID O_ID o ORDER_NUMBER o CUSTOMER_IDfrom CUSTOMER c inner join ORDERS o on c ID=o CUSTOMER_ID   where (c NAME like T% )

  查询结果为

  C_ID

  NAME

  AGE

  O_ID

  ORDER_NUMBER

  CUSTOMER_ID

  

  Tom

  

  

  Tom_order

  

  

  Tom

  

  

  Tom_order

  

  

  Tom

  

  

  Tom_order

  

  第六 右外链接

  Hql from Customer c rightjoin fetch c orders o where c name like T%

  执行的sql select c ID C_ID c NAME c AGE o ID O_ID o ORDER_NUMBER o CUSTOMER_IDfrom CUSTOMER c right outer join ORDERS o on c ID=o CUSTOMER_ID   where (c NAME like T% )

  查询结果为

  C_ID

  NAME

  AGE

  O_ID

  ORDER_NUMBER

  CUSTOMER_ID

  

  Tom

  

  

  Tom_order

  

  

  Tom

  

  

  Tom_order

  

  

  Tom

  

  

  Tom_order

  

  总结则为下表所示

  连接方式

  对应的sql查询

  Orders集合的检索策略

  查询结果的内容

  无连接

  查询单个customer表

  延迟检索策略

  集合包含customer的元素 集合中无重复元素 customer对应的order对象没有被初始化

  迫切左外连接

  左外连接查询customer和order

  迫切左外连接检索策略

  集合中包含customer的元素 集合中可能有重读元素 customer对象的order集合属性被初始化

  左外连接

  左外连接查询customer和order

  延迟检索策略

  集合中包含对象数据类型的元素 每个对象数组包含一对customer对象和order对象 不同的对象数组可能重复引用同一个customer对象了 customer对象的order集合属性未被初始化

  内连接

  内连接查询customer表和order表

  延迟检索策略

  集合中包含对象数据类型的元素 每个对象数组包含一对customer对象和order对象 不同的对象数组可能重复引用同一个customer对象了 customer对象的order集合属性未被初始化

  迫切内连接

  内连接查询customer和order

  迫切内链接检索策略

  集合中包含customer类型的元素 集合中可能有重复元素 customer对象的order集合属性被初始化

  右外链接

  右外链接查询customer表和order

  延迟检索策略

cha138/Article/program/Java/ky/201311/28043

相关参考

知识大全 hibernate的多条件动态查询

  在hibernate中是支持多条件动态查询的这种问题是非常实用的比如说你做一个项目要实现一个复合查询  例如有这么一个界面    那么要实现这个查询对于用户来说他的查询条件可能不健全有可能只填写其

知识大全 Hibernate 本地SQL查询

Hibernate本地SQL查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本地SQL查询来

知识大全 Hibernate复合主键查询

Hibernate复合主键查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Hibernate

知识大全 Hibernate数据查询

Hibernate数据查询  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  HibernateQu

知识大全 Hibernate 高级查询技巧

Hibernate高级查询技巧  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  集合过滤:  对于

知识大全 Hibernate高级查询实战

Hibernate高级查询实战  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  大家知道在Hibe

知识大全 Hibernate属性查询简介

Hibernate属性查询简介  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文向大家介绍Hi

知识大全 hibernate的条件查询

  首先定义一个条件查询实例这里要有一个主表(mainTable)  DetachedCriteriadeCriteria=DetachedCriteriaforClass(mainTableclas

知识大全 Hibernate 命名查询NamedQuery

Hibernate命名查询NamedQuery  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  例

知识大全 Hibernate查询方法之探析

Hibernate查询方法之探析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  :QBE(Que