Наверное, я не совсем понимаю двунаправленные отношения один-ко-многим.
У меня есть родитель, класс child-A и child-B с двунаправленными отношениями между Parent <-> Child-A <-> Ребенок-B. Я хочу добавить child-B в child-B-list of child-A, но при каждой попытке объединить родителя я получаю исключение дублированного ключа. Так как мне добавить нового потомка-B.
class Parent {
long id;
@One-To-Many, MappedBy Parent, Cascade All, OrphanRemoval true
list <child-A> childsA;
...
setter + getter
}
и
class Child-A {
long id;
@Many-To-One, JoinColums parentId, Cascade PERSIT MERGE REFRESH
Parent parent;
@One-To-Many, MappedBy Child-A, Cascade All, OrphanRemoval true
list <child-B> childsB;
...
setter + getter
}
и
class Child-B {
long id;
@Many-To-One, JoinColums Child-A-id, Cascade PERSIT MERGE REFRESH
Child-A child-A;
...
setter + getter
}
Как добавить нового потомка-B в child-A и объединить родителя, чтобы сохранить все в БД? До сих пор я пробовал:
Parent p = entityManager.getParent();
Child-A ca = p.getChildsA.get(indexOfCa); // the index is known
Child-B cb = new Child-B ();
... // fill cb with information
ca.add(cb); // automatically fires cb.setChild-A(ca);
p.getChildsA.set(index, ca);
entityManager.merge(p);
Но это вызывает исключение DublicatedKeyException. Итак, что является лучшим способом добавить объект child-B в уже сохраненный дочерний объект A из родительского объекта?
Я также должен сказать, что возможно только слияние (без сохранения, saveOrUpdate или сохраняются) и невозможно редактировать классы сущностей. Сущности генерируются чем-то вроде фабрики, и каждое изменение будет перезаписываться при создании проекта. И pom-файл не редактируется. Также это веб-приложение Java EE с множеством различных фреймворков, таких как простые и омнифасы.