0

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

4

2 回答 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 回答