在 hibernate 或 OpenJPA 中,如果这样做FetchType.EAGER
,我可能会加载不必要的数据并损害性能。如果我FetchType.LAZY
加载,我可能会遇到N + 1
问题。有什么指导方针在什么时候使用什么获取模式?
问问题
1604 次
2 回答
0
一般来说,您应该在之后立即需要数据的所有情况下使用急切获取。如果您遇到 N+1 问题,只需使用 Eager fetching 重新执行查询。
对于更具体的情况当然有更多的意见,但是,我想,SO 不是讨论事情的最佳场所。
于 2013-07-30T18:39:46.973 回答
0
我同意@DR 建议的一般准则:
延迟加载一方面意味着节省内存,另一方面意味着增加对数据库的查询次数。急切的加载则相反。
你必须选择你的毒药。
此外,我认为值得一提的是使用休眠获取配置文件覆盖获取策略的可能性(如果您打算使用休眠)。当预定义的惰性方法不够灵活时,它是一个很好的解决方案。使用 fetch 配置文件,您告诉 hibernate 以“不同的方式”为该事务获取对象。当您必须懒惰地获取对象时非常方便,但有时您需要不同的方法。
如果您采用二级缓存优化,您应该检查兼容性,因为当前的 fetch profile 实现支持 JOIN 策略。
于 2013-07-30T20:22:24.680 回答