如果在一个对象里关联另一个对象,并且fetch = FetchType.EAGER。
比如说ManyToOne(OneToMany也存在这种问题)关联,本来只需要取Many里的对象属性,可是Many里关联的对象都会单独再发一条语句取关联对象的属性。
本来只用发一条就可以查出Many里的对象属性,可是它发了一条语句后,再发N条语句取关联对象的数据。
解决办法:
1、fetch = FetchType.LAZY:在合适的时候才发出语句(按需要发语句)。
2、BatchSize:在One对象设置Size后,取出Many里的数据后,再发N/Size条语句取关联对象的数据,从而达到少发语句的目的。
3、Join Fetch:将Many与One做外连接,因此只要发一条语句就可以查出Many与其相关联的One对象数据,Criteria默认就是这种做法。如何选择解决办法:
如果只要用Many里的对象,不用关联对象的属性,那就用方法1解决;
如果要Many里的对象属性,也想要关联的对象属性就用方法3解决。
hibernate n+1问题
最新推荐文章于 2025-07-06 12:11:00 发布
本文探讨了1+N问题,即在数据库查询中,由于Eager加载策略导致的一次查询后产生多次额外查询的问题。介绍了该问题的原因及三种解决方案:使用Lazy加载、设置BatchSize和采用JoinFetch。针对不同需求,提出了如何选择合适的解决方法。
188

被折叠的 条评论
为什么被折叠?



