如何在Hibernate中禁用延迟加载?我正在使用持久性注释,而不是hbm xml文件。
我按ID获取单个对象并希望加载所有属性。在使用对象之前会话已关闭。
谢谢!
答案 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