知识大全 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本地SQL查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本地SQL查询来
Hibernate复合主键查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hibernate
Hibernate数据查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! HibernateQu
Hibernate高级查询技巧 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 集合过滤: 对于
Hibernate高级查询实战 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 大家知道在Hibe
Hibernate属性查询简介 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文向大家介绍Hi
首先定义一个条件查询实例这里要有一个主表(mainTable) DetachedCriteriadeCriteria=DetachedCriteriaforClass(mainTableclas
Hibernate命名查询NamedQuery 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 例
Hibernate查询方法之探析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! :QBE(Que