我有两个类“方法”和“后端方法”,它们处于一对多关系中。我在BackentMethod.java中的“方法”集上使用了mappingBy注释。

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

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

当我像这样将它们分配给他们时:

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


我得到一个HibernateException:


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


当我像这样复制整个集合时:

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


之后,该集合将为null。

我究竟做错了什么?

最佳答案

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


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

或者,您可以将关系更改为多方关系。

10-06 02:46