在hibernate中,Lazy Fetch策略与Eager Fetch策略相比?

时间:2011-11-07 16:35:52

标签: hibernate

我在http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html完成了Hibernate教程并得到了一个问题,其中select或Join中的获取策略更好,我们应该去。我知道大多数人会说这取决于你的要求。但在大多数网络应用程序中,我们有共同的要求,即性能应该是好的。以下是我的理解: -

延迟/选择提取策略: - 选择提取策略是关联的延迟提取。懒惰策略的目的是内存优化。当我说内存优化时,这意味着它意味着它可以避免堆错误。这就是我的想法。所以我们可以说是的,如果我们加载太多的对象,我们应该去做 Lazy Fetch策略,但就时间性能而言,它不提供任何好处。同意?

Eager / Join Fetch策略: - Join Fetch策略渴望获取关联。Join Fetch策略的目的是在时间上进行优化。我的意思是在获取父对象时甚至可以获取偶数关联。所以在这种情况下,我们不会一次又一次地进行数据库调用。所以这会快得多。如果我们在会话中获取太多对象,那么这会很糟糕,因为我们可以得到java堆错误。

所以现在我们可以说在hibernate会话中我们没有加载太多的对象我们应该去Eager fetch,因为它在时间响应方面要好得多(任何方式内存都会被垃圾收集器回收)一旦我们结束会议)?

1 个答案:

答案 0 :(得分:1)

如果您需要加载数据,请转到Join;如果您通常不需要,请转到Select

关于Java Heap Error不要太担心。你必须加载大量的物体。您可以设置batch size。对象的负载不是唯一的策略。

如果您不需要加载所有对象,可以添加特定的HQL或标准。

如果您需要的物品超过了Join,则Select