2010-09-29 37 views
1

我擁有的是一個實體bean,例如Entity(EJB 3)將ArrayList<Entity>中的相同類型的子項保留,其父項<Entity>以及與另一個實體<Users>的關係。用戶可以擁有多個實體,反之亦然(多對多)。深入複製具有關係的EJB實體bean

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

我已經設置了克隆方法來創建Entity(即一個新的實體)的克隆,然後在foreach循環中用children實體的克隆填充它。

但是,這給了我一個併發修改異常,我最終只有最初的Entity豆克隆沒有它的children

我的問題是:

是我想都做可行的,或者我應該從管理的例如深複製一個門面? 如果可行的話,你能指示我請讀一些東西或給我幾點提示,因爲直到現在我通過一個門面進行克隆,它已經成爲我應用程序中的一個主要負擔。

在此先感謝!

pataroulis

回答

2

嘗試使用(從commons-lang

YourEntity clone = SerializationUtils.clone(entity); 

你必須讓你的實體Serializable(你不一定想要的,雖然)。此外,這應該在EntityManager仍然打開的情況下完成,否則你會得到懶惰的初始化異常。

1

您必須創建一個新的列表,否則您將添加到您正在迭代的同一列表中,因此會發生併發修改異常。

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

如果您使用的EclipseLink您也可以使用上的EclipseLink JpaEntityManager副本()API。您可以傳遞指定複製程度有多深的CopyGroup,以及是否應重置Id。

0

如果oyur實體沒有分離,你必須處理幾個問題。此外,你必須克隆或serilize您的實體以外的事務scoper otherwithe你會得到DetachedEntityPassedToPersistException()。 Here is更詳細的解答:。