簡體   English   中英

具有關系的EJB實體bean的深層復制

[英]Deep copying of EJB Entity beans with relations

我所擁有的是一個實體Bean,例如Entity (EJB 3),它在ArrayList<Entity>中保留相同類型的子代,其父<Entity>以及與另一個實體<Users>的關系。 用戶可以擁有許多實體,反之亦然(很多對許多實體)。

我想這樣做是重寫Entity.clone()或者有一個新的方法),以深拷貝Entity與克隆一起children ,屬於同一母公司和被分配到已經存在的用戶。

我已經建立了克隆的方法來創建的克隆Entity (一個新的實體即是),然后用克隆填充children foreach循環內的實體。

但這給了我一個並發的修改異常,最后我得到的只是初始Entity Bean的一個克隆,沒有它的children

我的問題是:

我想做的事情是否完全可行,還是應該管理Facade的深層復制? 如果可行,請您指導我閱讀一些內容或給我一些提示,因為到目前為止,我是通過立面進行克隆的,這已成為我應用程序的主要負擔。

提前致謝!!

pataroulis

嘗試使用(來自commons-lang

YourEntity clone = SerializationUtils.clone(entity);

您將不得不使您的實體可Serializable (盡管您可能不一定想要)。 同樣,應該在EntityManager仍處於打開狀態時執行此操作,否則會出現惰性初始化異常。

您必須創建一個新的List,否則您將添加到要迭代的同一List,從而導致並發修改異常。

Entity clone = super.clone();
clone.setChildren(new ArrayList());
for (Child child : this.getChildren()) {
  clone.addChild(child.clone());
}
return clone;

如果您使用的是EclipseLink,則還可以在EclipseLink JpaEntityManager上使用copy()API。 您可以傳遞一個CopyGroup,它指定制作副本的深度以及是否應重置ID。

如果您的實體未分離,則必須處理幾個問題。 另外,您還必須在事務作用域之外克隆或序列化實體,否則將獲得DetachedEntityPassedToPersistException()。 這里是更詳盡的答案:

暫無
暫無

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

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