如何在Hibernate中决定EAGER和LAZY加载

时间:2013-07-30 17:22:26

标签: lazy-loading eager-loading

在hibernate或OpenJPA中,如果我执行FetchType = EAGER,我冒着加载不必要数据和损害性能的风险。 如果我加载LAZY,我冒险遇到N + 1问题。 是否有什么准则可以在什么时候使用获取模式?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我同意@ D.R.:

建议的一般准则

懒惰加载一方面意味着内存节省,另一方面意味着增加对数据库的查询数量渴望加载相反

你必须选择毒药。

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

如果采用二级缓存优化,则应检查兼容性,因为当前的获取配置文件实现支持JOIN策略。