【发布时间】:2013-07-29 20:33:02
【问题描述】:
看完这篇文章enter link description here
我知道获取模式 = LAZY 总是会导致 N +1 问题。这是真的?如果是这样,为什么?即使获取类型是 LAZY,OpenJPA/Hibernate 也应该能够优化查询。没有?
【问题讨论】:
标签: hibernate fetch openjpa eager-loading
看完这篇文章enter link description here
我知道获取模式 = LAZY 总是会导致 N +1 问题。这是真的?如果是这样,为什么?即使获取类型是 LAZY,OpenJPA/Hibernate 也应该能够优化查询。没有?
【问题讨论】:
标签: hibernate fetch openjpa eager-loading
您可以在查询中指定 Eager fetch 来避免它。这会产生一个 JOIN sql。
Criteria c = session.createCriteria(Entity1.class);
c.setFetchMode("anotherObj", FetchMode.JOIN)
return c.list();
【讨论】:
是的,会的。但是只有在访问关系中定义的对象时才会执行额外的 SELECT(这就是它被称为 LAZY 加载的原因)。
这是一篇很好的文章,更详细地解释了它:http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/
干杯
【讨论】: