JPA:双向协会& orphanRemoval - 需要从双方(父母和孩子)中删除关联吗?

时间:2017-09-28 23:35:46

标签: jpa parent-child bidirectional orphan

这是一个似乎没有官方答案的问题。至少我找不到一个。

情况:如果我有一个双向的一对多关联,并且我希望orphanRemoval = true来采取行动,我现在是否必须从关联的两边删除关联,或者仅仅是"打破"通过删除其中一个实体的引用(相反)来进行关联?

示例:

class Parent {
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
List<Child> children;

 public void addChild(Child child) {
    child.setParent(this);
    children.add(child);
 }

 public void removeChild(Child child){
    //both statements neccessary or just one? Does it matter which one?
    children.remove(child);
    if (child != null) {
        child.setParent(null);
    }
 }
}

class Child {
 String name;
 @ManyToOne
 @JoinColumn(name="parentID")
 Parent parent;

 public void setParent(Parent p) {
  [...]
 }

}

我在我的书中发现了这个解释&#34; Mike JP的Pro JPA 2&#34; (第2版,第287页):

  

当指定时,orphanRemoval元素会导致在父元素与子元素之间的关系被破坏时删除子实体。   这可以通过将包含该属性的属性设置为null来完成   通过从集合中删除子实体,在一对多的情况下,相关实体。然后,提供者在刷新或提交时(以先到者为准)负责删除孤立子实体。   在亲子关系中,孩子依赖于父母的存在。如果父母被删除,   然后根据定义,孩子成为一个孤儿,也必须被移除。

然后有些帖子同时执行这两个帖子:

我的问题:

1)现在需要哪些正确/哪一个是必要的?

2)如果Child类有一个,会发生什么     @JoinColumn(name =&#34; parentID&#34;, nullable = false )及其父级     如上所示,引用将设置为null?我的猜测:     orphanRemoval将在稍后进行,并基于其中的值     数据库,直到Child实体更新为止。但那     更新不会发生,因为nullable = false,对吧?

0 个答案:

没有答案