hibernate 抓取策略

本文探讨了ORM中单端代理与集合代理的不同fetch策略,包括select、join及subselect的影响范围,并介绍了批量抓取的原理及其如何提高查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

1.单端代理(对端是One,即many2one):

   1.1 在用many2one时,fetch可以采取select或者join.

          * 用select时,会另发一条语句加载关联对象。

          * 用join时,用一条语句就查上来,相当于数据库里面的连接,内连接外连接取决于外键是否允许为空。

 

注意:这个规则仅适用于get或者load时,对HQL没有任何作用,即依然是会另发一条语句。

 

2.集合代理(对端是集合,即one2many)

2.1 这里fetch有3种取值:select,join,subselect

      * select,join和单端代理的一样,只影响load和get,对HQL无用。

      * 而subselect对get和load无效,对HQL有效。即用subselect,get和load还是另发一条语句,而HQL却是一下子查出来(比如select * from students where classid in (select * from classes))

 

 3.批量抓取(主要是用在many2one,或者one2many中的多的一方,加上一个batch-size=5)

     * 用在多的一端,假设many2one当中,50个学生对应50个不同班级,那么查询50个学生后,就得再查50次,才能将50个班级查出来,而如果在学生上加上batch-size=10,那么只要查50/10=5次就可以将班级全部查出来,用的是sql中的in原理。

 

 ------------------------------------------------------------

join和join fetch的区别:

join对load,get有效,对hql无效。

join fetch一般对hql有效。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值