如何在Hibernate中复制引用?

时间:2012-03-07 13:25:22

标签: java hibernate

我有两个Classes'Method'和'BackendMethod',它们是一对多的关系。我在BackentMethod.java中使用了'方法'集合中的mappedBy-annotation。

我制作了一个名为methodCopy的实例methodOriginal的副本,并将其保留。 现在我想让methodOriginal引用的所有BackendMethods也被methodCopy引用。

我不想复制它们,只需再将它们分配给新的“方法”。

当我将它们分配给他们时:

methodCopy.setBackendMethoden(methodOriginal.getBackendMethoden()));

我得到一个HibernateException:

  

HibernateException:找到对集合的共享引用:Method.backendMethoden

当我像这样复制整套时:

methodCopy.setBackendMethoden(new HashSet<Backend>(methodOriginal.getBackendMethoden())));
methodCopy.persist();

之后该集合将为null。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

  

我不想复制它们,只需再将它们分配给新的“方法”。

这不起作用,因为您已将method和backendMethod之间的关系定义为oneToMany。一个BackendMethod实体只能由一个Method(原始)实体引用。如果你想要一个MethodCopy的同一组backendMethods,那么你需要一组新的backendMethod对象。在这种情况下,那些后端方法实体在您的数据库中重复(当然使用不同的PK)。

或者您可以将关系更改为manytomany。

答案 1 :(得分:0)

当你在hibernate中复制引用时,请记住将id值和relationsship值设置为null。这是我通常做的,

因此,您需要遍历methodOriginal.getBackendMethoden()并将引用和ids设置为null,然后将其设置为methodCopy

还要确保methodCopy和id值为null

然后,这将被视为一个新对象,并将被保留。