簡體   English   中英

Hibernate嘗試保存一個分離的實體-LazyInitializationException

[英]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.

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