在Hibernate中禁用延迟加载

时间:2011-03-29 21:25:35

标签: hibernate persistence lazy-evaluation hibernate-annotations

如何在Hibernate中禁用延迟加载?我正在使用持久性注释,而不是hbm xml文件。

我按ID获取单个对象并希望加载所有属性。在使用对象之前会话已关闭。

谢谢!

3 个答案:

答案 0 :(得分:6)

您需要使用FetchType.EAGER注释您希望非延迟加载的属性

   @ManyToOne(fetch = FetchType.EAGER)

你看,你加载的不是延迟加载的对象。相反,该对象的关联是懒惰的,你需要告诉他们这不是你想要的行为。

如果这些对象也有你想要加载的关联,你也需要注释它们。

答案 1 :(得分:0)

您可以递归地为所有关联指定fetch = FetchType.EAGER,但这会加载您可能不感兴趣的大量数据。

这通常是一个更好的解决方案,至少让所有OneToMany和ManyToMany关联到LAZY(这是默认值),并在关闭会话之前初始化它们,如果您的用例需要它们(或者甚至用ad-hoc加载它们)查询)。

默认情况下,OneToOne和ManyToOne关联是EAGER,这通常会产生太多请求。我通常喜欢将所有内容标记为懒惰,除非所有用例都需要获取关联。

答案 2 :(得分:0)

对于您想要延迟关闭的所有集合和实体,请使用fetch = FetchType.EAGER。

同时检查出来: http://techblog.bozho.net/?p=645