一尘不染

Hibernate PersistentSet remove()操作不起作用

hibernate

我的父实体中有一个集合,如下所示:

Class Parent {
 @OneToMany(mappedBy = parent, cascade = CasacadeType.ALL)
 Set<Child> children;
}

Class Child {
 @Column(nullable=false)
 @ManyToOne
 Parent parent;
}

现在发生事件,如果我对其元素之一在Set上执行remove()操作,则实际上并没有将其删除。


阅读 217

收藏
2020-06-20

共1个答案

一尘不染

您的映射应如下所示:

public class Parent { 
    @OneToMany(mappedBy = parent, cascade = CasacadeType.ALL, orphanRemoval = true) 
    private Set<Child> children = new HashSet<>();

    public void removeChild(Child child) {
        children.remove(child);
        child.setParent(null);
    }
}

public class Child {
    @ManyToOne
    private Parent parent;
}

本文所述,由于您具有双向关联,因此必须使双方同步。

因此,最好的做法是致电:

parent.removeChild(child);

这样一来,removeChild是要删除Childchildren Set,并设定了Child parent协会null

2020-06-20