Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有关系的EJB实体bean的深度复制_Java_Orm_Jpa - Fatal编程技术网

Java 具有关系的EJB实体bean的深度复制

Java 具有关系的EJB实体bean的深度复制,java,orm,jpa,Java,Orm,Jpa,我拥有的是一个实体bean,例如,entity(ejb3),它在ArrayList中保留相同类型的子对象、其父对象以及与另一个实体的关系。用户可以拥有多个实体,反之亦然(多对多) 我想做的是重写Entity.clone()(或使用新方法)以深度复制Entity,以及子项的克隆,这些子项属于同一父项,并被分配给现有用户 我已经设置了克隆方法来创建实体(即新实体)的克隆,然后在foreach循环中用子实体的克隆填充它 但这给了我一个并发修改异常,我最终只得到了初始实体bean的一个克隆,没有它的子项

我拥有的是一个实体bean,例如,
entity
(ejb3),它在
ArrayList
中保留相同类型的子对象、其父对象
以及与另一个实体的关系
。用户可以拥有多个实体,反之亦然(多对多)

我想做的是重写
Entity.clone()
(或使用新方法)以深度复制
Entity
,以及
子项的克隆,这些子项属于同一父项,并被分配给现有用户

我已经设置了克隆方法来创建
实体
(即新实体)的克隆,然后在foreach循环中用
子实体
的克隆填充它

但这给了我一个并发修改异常,我最终只得到了初始
实体
bean的一个克隆,没有它的
子项

我的问题是:

我想做的事情是否可行,或者我是否应该管理从正面进行的深度复制? 如果可行的话,你能告诉我一些可以阅读的东西或者给我一些提示吗?因为到目前为止,我是通过一个门面进行克隆的,这已经成为我应用程序中的一个主要负担

提前谢谢

pataroulis

尝试使用(从)


您必须使您的实体
可序列化
(但您可能并不一定需要)。另外,这应该在
EntityManager
仍处于打开状态时进行,否则会出现延迟初始化异常。

您必须创建一个新列表,否则将添加到正在迭代的同一列表中,因此会出现并发修改异常

i、 e


如果您使用的是EclipseLink,还可以使用EclipseLink JPAEEntityManager上的copy()API。您可以传递一个复制组,该复制组指定制作副本的深度,以及是否应重置Id。

如果未分离您的实体,您必须处理几个问题。此外,您还必须克隆或序列化事务作用域之外的实体,否则您将获得detachedEntityPassedOpersistException()。 更详细的回答:

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