Hibernate Set查询过虑

本文介绍如何在Hibernate中通过左连接查询实现Set集合的过滤,提高系统性能。利用distinct和fetch关键字仅获取knowledge的isShared为true的User及其相关Knowledge。
摘要由CSDN通过智能技术生成
今天在做一个项目需要做到Set集的数据过虑,因为在获取一个User的时候不能将属于这个User的Knowledge全部取出,再一个一个地筛选符合条件的Knowledge,这样做会在很大的程度降底系统性能。

在Hibernate中类型为Set、List的实体属性也是可以连接查询的,例如User里面有一个Set<Knowledge> knowledge属性要获取User中Knowledge的isShared的属性为true的User并且在返回的User中的knowledges中包含isShared为true的Knowledge对象的时候,就要通Set的过虑查询(左连接查询),在hibernate3.2.3以后的写法如下:
select distinct u from User u left join fetch u.knowledges k where k.isShare=true。
这样就只会获取knowledge的isShared为true的User,并且User里面的knowleges中包含knowledge的isShared为true的Knowlege对象。
需要注意的是:关键字distinct和fetch。要实现上面的数据过虑就得要这两个关键字。第一个关键字是独立的意思,第二个关键字是以一条sql语句执行。如果少了fetch这个关键字,则达不到目的。返回的结果是一个User包含isShared为true和false的knowledge集合。

同理,如果Knowledge里面还要Set、List属性,并且也要据根这些属性中的对象的某些属性约束查询的话(二级或三级连接查询),也是一样可以做到的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值