12

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

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

谢谢!

4

4 回答 4

6

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

   @ManyToOne(fetch = FetchType.EAGER)

你看,你正在加载的对象不是延迟加载的。相反,该对象的关联是惰性的,如果这是您想要的行为,您需要告诉它们不要。

如果这些对象还具有您希望立即加载的关联,您还需要对它们进行注释。

于 2011-03-29T21:30:32.653 回答
0

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

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

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

于 2011-03-29T21:34:12.293 回答
0

将 fetch = FetchType.EAGER 用于您希望懒惰关闭的所有集合和实体。

另请查看: http ://techblog.bozho.net/?p=645

于 2014-07-17T18:14:27.447 回答
0

fetch = FetchType.EAGER在 oneToMany 注释中。

像这样: @OneToMany(fetch = FetchType.EAGER)

注意:如果你的数据库很大,关系很多,会大大增加你的数据库进程;

于 2021-12-02T05:38:03.450 回答