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