У меня есть отношение «один ко многим» между Частью и Параметрами («Часть» имеет много «Параметров).
Я пытаюсь сделать что-то наивное, как это:
Part sourcePart = em.find(Part.class, partIdSource);
Part destPart = em.find(Part.class, partIdDest);
Collection<Param> paramListSource = sourcePart.getParamList();
destPart.setParamList(paramListSource);
В основном я хочу скопировать все параметры из sourcePart в destPart. Надеемся, что поставщик сохраняемости автоматически установит правильные внешние ключи в таблице / сущности Param.
Код выше, очевидно, не будет работать.
Есть ли простой способ сделать это, или мне нужно создать новую коллекцию, а затем добавить каждый параметр (создание нового параметра, задание атрибутов и т. Д.)?
Редактировать
Сначала я попытался отсоединить сущность, как это рекомендовано в другом потоке, но я получил исключение (org.hibernate.PersistentObjectException: отсоединенная сущность передана в persist: 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());