Из того исключения, которое вы опубликовали, похоже, что вы пытаетесь использовать отдельный Domain
объект с новым Action
объектом.Прежде чем сохранить действие, вам нужно заново присоединить объект Domain
, используя метод EntityManger.merge
:
domainObject = entityManager.merge(domainObject);
Action action = new Action(domainObject, "name", "description");
entityManager.persist(action);
Если вы хотите обработать оба случая, описанные в вашем вопросе, вы можете использовать слияние вместосохраняться на объекте Action.Метод слияния сохранит новое действие и повторно присоединит или сохранит объект Domain (поскольку вы указали Cascade.MERGE).
Action action = new Action(domainObject, "name", "description");
action = entityManager.merge(action);
Просто не забудьте использовать новый экземпляр объекта Domain, связанныйс действием после слияния.Если вы собираетесь использовать объект домена после объединения объекта Action, обязательно сделайте что-то вроде этого:
domainObject = action.getDomain();