[英]Hibernate trying to save a detached entity - LazyInitializationException
我有以下實體:
@Entity
public class B{
@OneToMany
private List<C> cList;
private Long d;
}
在我的托管bean中,我需要加載一個特定的b(它可以正常工作)以編輯所包含的屬性(cList,d):
@ManagedBean
public class Bean{
private B b;
public void onEvent(Long bId){
b = bManager.load(bId);
}
}
B的屬性必須使用JSF-Form進行編輯。 我不希望這些更改反映到數據庫中。
問題與這個(舊)線程幾乎相同。 但是在我的情況下,所有建議都沒有起作用(嘗試過em.flush(),em.detach(),session.evict())。
除了深度復制,沒有其他解決方案嗎?
可以這樣做,但是首先最好了解休眠狀態以及為什么會出現異常。 這是有關對象狀態的文檔
如果要訪問帶有對象C的列表,或者要修改其中的一些對象,則必須先獲取它,然后才能到達托管bean。 默認情況下,hibernate會懶惰地獲取對象,並且在訪問它們時將加載相關的對象,但是前提是必須將事務和會話附加到對象上。 因此,在您的托管bean對象中,對象已分離,並且此時無法獲取C列表。 為了解決該問題,您必須先獲取要更改的所有對象,然后再將它們到達托管bean。 即
@OneToMany
@Fetch(FetchMode.JOIN) // load it with sql join
private List<C> cList;
還有許多其他方法可以達到相同的結果。 因此,現在您可以更新B和C實體列表,然后調用B實體的更新功能。
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.