@Fetch FetchMode=select/join/subselect

最近看到了hibernate的fetch mode ,想着以前用的是fetch=fetchType.LAZY/EAGER 。就去网上查了一下,发现都是设定关联对象的加载策略。

FetchType.LAZY: 懒加载,在访问关联对象的时候加载(即从数据库读入内存)
FetchType.EAGER:立刻加载,在查询主对象的时候同时加载关联对象。

@Fetch(FetchMode.JOIN): 始终立刻加载,使用外连(outer join)查询的同时加载关联对象,忽略FetchType.LAZY设定。
@Fetch(FetchMode.SELECT) :默认懒加载(除非设定关联属性lazy=false),当访问每一个关联对象时加载该对象,会累计产生N+1条sql语句
@Fetch(FetchMode.SUBSELECT) 默认懒加载(除非设定关联属性lazy=false),在访问第一个关联对象时加载所有的关联对象。且FetchType设定有效。

这样说明不是很能理解FetchMode的各个作用:
点大图

可以右键图片,打开新标签查看。可能形状会有点“长”…
另外发现@Fetch(FetchMode.SELECT)中会有N+1的问题,于是找了两篇文章,讲到了如何解决N+1的问题:
NHibernate N+1问题实例分析和优化
Hibernate n+1问题

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值