在hibernate或OpenJPA中,如果我执行FetchType = EAGER,我冒着加载不必要数据和损害性能的风险。 如果我加载LAZY,我冒险遇到N + 1问题。 是否有什么准则可以在什么时候使用获取模式?
答案 0 :(得分:0)
一般情况下,您应该在之后立即需要数据的所有情况下使用急切提取。如果遇到N + 1问题,只需用急切的提取重新执行查询。
对于更具体的情况,当然还有更多的意见,但是,我想,这不是讨论事情的最佳场所。
答案 1 :(得分:0)
我同意@ D.R.:
建议的一般准则懒惰加载一方面意味着内存节省,另一方面意味着增加对数据库的查询数量。 渴望加载相反。
你必须选择毒药。
此外,我认为值得一提的是用hibernate fetch profiles覆盖提取策略的可能性(如果你打算使用hibernate)。当预定义的惰性方法不够灵活时,这是一个很好的解决方案。 使用获取配置文件,您可以告诉hibernate以“不同的方式”获取对象,仅用于该事务。当你必须懒洋洋地得到物品时非常方便,但有时你需要一种不同的方法。
如果采用二级缓存优化,则应检查兼容性,因为当前的获取配置文件实现支持JOIN策略。