繁体   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