Hibernate 惰性获取类型是否产生N+;1选择

Hibernate 惰性获取类型是否产生N+;1选择,hibernate,fetch,openjpa,eager-loading,Hibernate,Fetch,Openjpa,Eager Loading,看完这篇文章 我认为fetchmode=LAZY总是会导致N+1问题。这是真的吗?若然,原因为何?即使fetch类型是惰性的,OpenJPA/Hibernate也应该能够优化查询。否?您可以在查询中指定急取以避免它。这将生成一个连接sql Criteria c = session.createCriteria(Entity1.class); c.setFetchMode("anotherObj", FetchMode.JOIN) return c.list(); 是的,会的。但是,只有在访问关

看完这篇文章


我认为fetchmode=LAZY总是会导致N+1问题。这是真的吗?若然,原因为何?即使fetch类型是惰性的,OpenJPA/Hibernate也应该能够优化查询。否?

您可以在查询中指定急取以避免它。这将生成一个连接sql

Criteria c = session.createCriteria(Entity1.class);
c.setFetchMode("anotherObj", FetchMode.JOIN)
return c.list();

是的,会的。但是,只有在访问关系中定义的对象时,才会执行额外的选择(这就是为什么称为延迟加载)

这是一篇很好的文章,详细地解释了这一点:


干杯

我的问题不是如何避免N+!通过一个急切的获取,但是…一个懒惰的获取是否自动意味着一个N+1选择?