0

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

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

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

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

它按预期工作 - 它实际上意味着

departmentX.getUsers.contains(userX) == false.

被隐式调用。

但是,当我这样做的时候

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

它不会级联!意义——我能做到

userX.getDepartments.contains(departmentY) == true 

任何想法为什么级联都只能以一种方式工作?有解决办法吗?

谢谢

4

1 回答 1

1

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

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

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

于 2013-08-14T14:14:47.287 回答