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