我的父实体中有一个集合,如下所示:
Class Parent { @OneToMany(mappedBy = parent, cascade = CasacadeType.ALL) Set<Child> children; } Class Child { @Column(nullable=false) @ManyToOne Parent parent; }
现在发生事件,如果我对其元素之一在Set上执行remove()操作,则实际上并没有将其删除。
您的映射应如下所示:
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是要删除Child从children Set,并设定了Child parent协会null。
removeChild
Child
children
Set
parent
null