我有一个部门实体,其关系如下:
许多部门可以在一个部门中:
@ManyToOne
@JoinColumn(name = "ik_parent_department_id")
private Department parentDepartment;
一个上级部门可以有多个部门:
@OneToMany(mappedBy = "parentDepartment")
private Set<Department> children = new HashSet<Department>(0);
我想实施下一个:当我删除 部门时,所有子项的 ik_parent_department_id 参数此部门设置为 null 。任何想法如何做到这一点?
答案 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));
}