LAZY获取类型是否产生N + 1选择

时间:2013-07-29 20:33:03

标签: hibernate fetch openjpa eager-loading

阅读本文enter link description here

我认为获取模式= LAZY将始终导致N + 1问题。这是真的?如果是这样,为什么?即使获取类型为LAZY,OpenJPA / Hibernate也应该能够优化查询。否?

2 个答案:

答案 0 :(得分:0)

您可以在查询中指定eager fetch以避免它。这会生成一个JOIN sql。

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

答案 1 :(得分:0)

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

这篇文章更详细地解释了它:http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/

干杯