我在零件和参数之间有一对多的关系(一个“零件”有很多“参数”).
我正在尝试做这样的天真的事情:
Part sourcePart = em.find(Part.class, partIdSource);
Part destPart = em.find(Part.class, partIdDest);
Collection paramListSource = sourcePart.getParamList();
destPart.setParamList(paramListSource);
基本上,我想将所有参数从sourcePart复制到destPart.希望持久性提供程序将在Param表/实体中自动设置正确的外键.
上面的代码显然不起作用.
有没有简便的方法,还是必须创建一个新的集合,然后添加每个Param(创建新的Param,设置属性等)?
编辑
我尝试像在另一个线程中推荐的对象那样首先分离实体,但是却遇到异常(org.hibernate.PersistentObjectException:传递给持久化的分离实体:shared.entity.Param).
Part sourcePart = em.find(Part.class, partIdSource);
// force eager loading...
((List)sourcePart.getParamList()).get(0);
Part destPart = em.find(Part.class, partIdDest);
// detach entity
org.hibernate.Session session = ((org.hibernate.ejb.EntityManagerImpl) em.getDelegate()).getSession();
session.evict(sourcePart);
//causes exception "detached entity passed to persist"
destPart.setParamList(sourcePart.getParamList());