【问题标题】:How to decide between EAGER and LAZY loading in Hibernate如何在 Hibernate 中决定 EAGER 和 LAZY 加载
【发布时间】:2019-07-24 04:13:50
【问题描述】:

在 hibernate 或 OpenJPA 中,如果我这样做 FetchType.EAGER,我可能会加载不必要的数据并损害性能。 如果我执行FetchType.LAZYloading,我可能会遇到N + 1 问题。 有什么指导方针在什么时候使用什么获取模式?

【问题讨论】:

    标签: lazy-loading eager-loading


    【解决方案1】:

    我同意@D.R. 建议的一般准则:

    延迟加载一方面意味着节省内存,另一方面意味着增加对数据库的查询次数渴望加载是相反

    你必须选择你的毒药。

    此外,我认为值得一提的是使用hibernate fetch profiles 覆盖获取策略的可能性(如果您打算使用休眠)。当预定义的惰性方法不够灵活时,它是一个很好的解决方案。 使用 fetch 配置文件,您告诉 hibernate 以“不同的方式”仅针对该事务获取对象。当您必须懒惰地获取对象时非常方便,但有时您需要不同的方法。

    如果您采用二级缓存优化,则应检查兼容性,因为当前的 fetch profile 实现支持 JOIN 策略。

    【讨论】:

      【解决方案2】:

      一般来说,您应该在之后立即需要数据的所有情况下使用急切获取。如果遇到 N+1 问题,只需使用 Eager fetching 重新执行查询即可。

      对于更具体的情况当然还有更多的意见,但是,我想,SO 不是讨论事情的最佳场所。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-10
        • 1970-01-01
        • 2016-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-18
        • 2017-01-19
        相关资源
        最近更新 更多