在@OneToMany中,在hibernate中删除set null

时间:2011-11-23 13:56:33

标签: hibernate

我有一个部门实体,其关系如下:

  1. 许多部门可以在一个部门中:

    @ManyToOne
    @JoinColumn(name = "ik_parent_department_id")
    private Department parentDepartment;
    
  2. 一个上级部门可以有多个部门

    @OneToMany(mappedBy = "parentDepartment")
    private Set<Department> children = new HashSet<Department>(0);
    
  3. 我想实施下一个:当我删除 部门时,所有子项的 ik_parent_department_id 参数部门设置为 null 。任何想法如何做到这一点?

3 个答案:

答案 0 :(得分:10)

您必须明确将孩子的ik_parent_department_id设置为null。

Department parentDepartment = (Department) session.load(Department.class, id);
session.delete(parentDepartment);
for (Department child : parentDepartment.getChildren()){
    child.setParentDepartment(null);
} 
session.flush();

使用级联,您只能设法删除子Departments

答案 1 :(得分:5)

只需编码:

for (Department child : parent.getChildren()) {
    child.setParentDepartment(null);
}
session.delete(parent);

答案 2 :(得分:1)

使用JPA,在父Entity中,您可能会有类似

的内容
@OneToMany(mappedBy="parent", cascade={CascadeType.PERSIST})
Collection<Child> children;

并且为了避免可能重复“设置空代码”&amp;在父Entity中的父删除工具上的完整性违规例外也是

@PreRemove
private void preRemove() {
   children.forEach( child -> child.setParentnull));
}