Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 有级联的许多只级联一种方式_Hibernate_Jpa_Many To Many_Cascade - Fatal编程技术网

Hibernate 有级联的许多只级联一种方式

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

我有两个实体: 1) 使用者 2) 系

每个都包含一组其他的,因为它们之间的关系有很多

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

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操作使代码变脏。。。