簡體   English   中英

Hibernate:無法延遲初始化集合

[英]Hibernate : failed to lazily initialize a collection

我有兩個實體:User和Module wich使用多對多鏈接。

在我的用戶實體中,我有一個模塊列表成員:

在此處輸入圖片說明

我成功插入了一個新用戶,但是當我要檢索用戶時,我得到了用戶信息,但沒有得到用戶的模塊。 我收到此錯誤消息:

.hibernate.LazyInitializationException:無法延遲初始化角色集合:ma.propar.FireApp.Entites.Utilisateur.modules,無法初始化代理-沒有會話

默認情況下, user.modules @ManyToMany列表為LAZY,因此,在獲取users您只會獲得一個user.modules代理。

如果Hibernate Session關閉,則在未獲取LazyInitializationException情況下將無法訪問未初始化的代理。

要在同一HQL查詢中獲取模塊,您需要使用“獲取”:

select u from Utilisateur u left join fetch u.modules

盡管您可以將關聯設置為FetchType.EAGER以便始終沿用戶檢索模塊

@ManyToMany(fetch=FetchType.EAGER)

不應該使用EAGER,因為它對性能不利

為了piggy帶弗拉德的答案,您可以通過注釋來實現

import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@ManyToMany(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
@Fetch(FetchMode.SELECT)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM