如何在 Hibernate 中禁用延迟加载?我使用的是持久性注释,而不是 hbm xml 文件。
我正在按 ID 获取单个对象并希望加载所有属性。会话在我使用对象之前关闭。
谢谢!
如何在 Hibernate 中禁用延迟加载?我使用的是持久性注释,而不是 hbm xml 文件。
我正在按 ID 获取单个对象并希望加载所有属性。会话在我使用对象之前关闭。
谢谢!
您需要使用 FetchType.EAGER 注释要非延迟加载的属性
@ManyToOne(fetch = FetchType.EAGER)
你看,你正在加载的对象不是延迟加载的。相反,该对象的关联是惰性的,如果这是您想要的行为,您需要告诉它们不要。
如果这些对象还具有您希望立即加载的关联,您还需要对它们进行注释。
您可以递归地指定fetch = FetchType.EAGER
所有关联,但这会加载一大堆您可能不感兴趣的数据。
它通常是一个更好的解决方案,至少让所有 OneToMany 和 ManyToMany 关联到 LAZY(这是默认设置),如果您的用例需要它们(甚至使用临时查询加载它们),则在关闭会话之前初始化它们。
OneToOne 和 ManyToOne 关联默认是 EAGER,这已经经常产生太多的请求。我通常更喜欢将所有内容标记为惰性,除非所有用例都需要获取关联。
将 fetch = FetchType.EAGER 用于您希望懒惰关闭的所有集合和实体。
写fetch = FetchType.EAGER
在 oneToMany 注释中。
像这样: @OneToMany(fetch = FetchType.EAGER)
注意:如果你的数据库很大,关系很多,会大大增加你的数据库进程;