【发布时间】:2020-04-28 23:47:22
【问题描述】:
我想我不太了解双向一对多关系。
我有一个父母,一个孩子-A和孩子-B类,父母孩子-A 孩子-B之间有双向关系。我想将一个子 B 添加到子 A 的子 B 列表中,但是在每次尝试合并父级时,我都会得到一个重复的密钥异常。那么如何添加一个新的孩子-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 添加到子 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。那么,将子 B 对象从父对象添加到已经持久化的子 A 对象的最佳做法是什么?
我还不得不说,只有合并是可能的(不能保存、保存或更新或持久化)并且不能编辑实体类。实体由工厂之类的东西生成,并且在构建项目时,每个更改都将被覆盖。并且 pom 文件不可编辑。 这也是一个 Java EE Web 应用程序,具有许多不同的框架,例如 primefaces 和 omnifaces。
【问题讨论】:
标签: jpa one-to-many bidirectional java-ee-8