运用 @Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) 很好,但......
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
你也在设置 userAccount 参考文献 Group 至 null ?
userAccount
Group
null
您仍然需要手动管理Java关系,即必须将父项设置为 null 如果关系是双向的,在孩子身上。
首先,如果 UserAccount - > Group 关系是双向的,那么你需要将逆集合侧映射为
UserAccount
@OneToMany(targetEntity=GroupImpl.class, cascade{CascadeType.ALL},mappedBy="userAccount")
所以现在Hibernate知道了 UserAccount 是该集合的所有者。现在要删除@Pascal说你需要解开双方。由于Hibernate忽略了集合,所以所有者负责绑定关系,因此基本上这样的辅助方法会创建关联 UserAccount
public void addGroup(Group group){ group.setUserAccount(this); groups.add(group); }
现在删除另一个帮助方法
public void removeGroup(Group group){ group.setUserAccount(null); groups.remove(group); }
现在要删除
UserAccount ua = //load user account object for(Group g : ua.getGroups()) ua.removeGroup(g); session.delete(ua);
您的代码现在应该可以使用你不必按我的方式去做,但我希望你得到漂移。 DELETE_ORPHAN 应该照顾你的级联删除 groups
DELETE_ORPHAN
groups