【问题标题】:Does LAZY fetch type produce N +1 selectLAZY fetch 类型是否产生 N +1 选择
【发布时间】:2013-07-29 20:33:02
【问题描述】:

看完这篇文章enter link description here

我知道获取模式 = LAZY 总是会导致 N +1 问题。这是真的?如果是这样,为什么?即使获取类型是 LAZY,OpenJPA/Hibernate 也应该能够优化查询。没有?

【问题讨论】:

    标签: hibernate fetch openjpa eager-loading


    【解决方案1】:

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

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

    【讨论】:

    • 我的问题不是如何避免N+!通过急切的提取,但是...... LAZY 提取是否自动意味着 N +1 选择?
    【解决方案2】:

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

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

    干杯

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-31
      • 2012-09-29
      • 2021-04-20
      • 2010-12-03
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多