阅读本文后在此处输入链接描述
我的想法是 fetch mode = LAZY 总是会导致 N +1 问题。这是真的?如果是这样,为什么?即使获取类型是 LAZY,OpenJPA/Hibernate 也应该能够优化查询。不?
阅读本文后在此处输入链接描述
我的想法是 fetch mode = LAZY 总是会导致 N +1 问题。这是真的?如果是这样,为什么?即使获取类型是 LAZY,OpenJPA/Hibernate 也应该能够优化查询。不?
您可以在查询中指定 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/
干杯