fetch lazy 详解(一)

这篇博客探讨了Hibernate注解中@ManyToOne、@OneToMany和@OneToOne的默认懒加载行为。@OneToMany默认为懒加载,而@ManyToOne和@OneToOne默认为非懒加载。尽管通常在@ManyToOne设置懒加载,但在实际加载时,Hibernate可能会同时加载关联对象。fetch和lazy属性主要影响级联查询方式,fetch决定了是通过select还是join进行关联对象的获取,影响N+1查询问题。fetch策略在HQL查询中不适用,除非在HQL中明确使用join fetch。这些设置在提高数据检索效率方面起到关键作用。

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

透过测试发现Hibernate annotation中@ManyToOne,@OneToMany,@OneToOne中lazy的默认值是不同的



@OneToMany 默许Lazy为true


@ManyToOne,@OneToOne 默许lazy为false



在设立@ManyToOne的时分我们正常都市设立Lazy=true



正常不会在@ManyToOne,@OneToOne思忖这个问题



但现实hibernate进展load是时分是把一边也load出来的



fetch 和 lazy 重要是用以级联检询的, 而 cascade 和 inverse 重要是用于级联安插和批改的 fetch参数指定了联系关系对象抓取的形式是select查询仍是join查询,select形式时先查询回到要查询的主导对象(列表),再依据联系关系外键 id,每一个对象发一个select查询,获取联系关系的对象,形成n+1次查 询;而join形式,主导对象和联系关系对象用一句外键联系关系的sql与此同时查询出来,不会形成屡次查询。
如若你的联系关系对像样推延加载的,它当然不会去查询联系关系对象。此外,在hql查询中配置文件中设立的join模式是不起作用的(而在全部其余查询模式如get、criteria或再联系关系获取之类都是有效的),会应用 select模式,除非你在hql中拇指定join fetch某个联系关系对象。fetch计策用来定义 get/load一个对象时,何以获取非lazy的对象/会合。 这些参数在Query中无效
本文来源:
我的异常网
Java Exception
Dotnet Exception
Oracle Exception

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值