ManyToMany with cascade all only cascading one way

时间:2013-08-14 13:35:12

标签: hibernate jpa many-to-many cascade

我有2个实体: 1)用户 2)部门。

每个都包含另一个SET,因为它们之间的关系是很多ToMany,

我在用户实体和部门实体上标记了(CascadeType.ALL),当我这样做时:

userX.getDepartments.remove(departmentX);
save(userX);

它的工作方式与预期一致 - 它实际上意味着

departmentX.getUsers.contains(userX) == false.
隐式调用

但是,当我这样做时

departmentY.getUsers.remove(userX);
save(departmentY); 

它没有级联! 意思是 - 我可以做到

userX.getDepartments.contains(departmentY) == true 

任何想法为什么级联都只有一种方式? 有解决方案吗?

感谢

1 个答案:

答案 0 :(得分:1)

级联与你正在做的事情无关。级联意味着:当我保存X时,也保存Y.

您有一个ManyToMany双向关联。该协作的所有者方是User。这意味着对User.departments集合的每个更改都将保存到数据库中。另一方(Department.users)是反面。这意味着Hibernate将忽略对Department.users的每次更改。

您有责任在所有者方面执行操作,并且最好将关联的两端保持在一致状态:当用户从部门中移除时,该部门也应该从用户中删除,并且反之亦然。 Hibernate并不关心双方是否处于连贯状态:它会持续关联所有者方的状态(没有mappedBy属性的那个)