Hibernate 有级联的许多只级联一种方式
我有两个实体: 1) 使用者 2) 系 每个都包含一组其他的,因为它们之间的关系有很多 我在用户实体和部门实体上标记了(CascadeType.ALL),当我这样做时:Hibernate 有级联的许多只级联一种方式,hibernate,jpa,many-to-many,cascade,Hibernate,Jpa,Many To Many,Cascade,我有两个实体: 1) 使用者 2) 系 每个都包含一组其他的,因为它们之间的关系有很多 我在用户实体和部门实体上标记了(CascadeType.ALL),当我这样做时: userX.getDepartments.remove(departmentX); save(userX); 它像预期的那样工作——它实际上意味着 departmentX.getUsers.contains(userX) == false. 隐式调用 但是,当我这样做的时候 departmentY.getUsers.remo
userX.getDepartments.remove(departmentX);
save(userX);
它像预期的那样工作——它实际上意味着
departmentX.getUsers.contains(userX) == false.
隐式调用
但是,当我这样做的时候
departmentY.getUsers.remove(userX);
save(departmentY);
它不会级联!
意思是——我能做到
userX.getDepartments.contains(departmentY) == true
知道为什么级联都只有一种方式工作吗?
有解决办法吗
谢谢级联与您正在做的事情无关。级联意味着:当我保存X时,也保存Y 你有很多双向关联。关联的所有者方是用户。这意味着对
User.departments
集合的每次更改都将保存到数据库中。另一面(Department.users
)是相反的一面。这意味着Hibernate将忽略对Department.users的每一项更改
您的责任是在所有者端执行操作,最好是保持关联双方处于一致状态:当用户从部门中删除时,该部门也应从用户中删除,反之亦然。Hibernate并不关心双方是否处于一致状态:它保持关联的所有者方的状态(没有
mappedBy
属性的那一方)现在我很不愿意使用这种机制,当我为用户做这件事时,我会使用大量dao调用对部门的crud操作使代码变脏。。。