我对JPA的CascadeType.ALL
与@ManyToMany
关联的行为有些怀疑。我有以下情况:
在@ManyToMany
方Employee
和Department
与CascadeType.ALL
之间存在Employee
关联。
如果我创建属于同一部门的两名员工
Department sales = new Department("sales");
Employee alice = new Employee("alice", sales);
Employee bob = new Employee("bob", sales);
然后我坚持他们,由于级联,该部门按预期坚持。
然后我一次删除alice
和bob
。当我删除alice
时,Employee
被删除但销售部门未更改。
但是当我删除bob
(alice
之后)后,销售部门会自动删除。
为什么?我删除alice
时为什么不尝试删除部门?我会期待的!
谢谢!
答案 0 :(得分:0)
预计实体不能引用不存在的实体。因此,如果JPA
按预期工作,那么在Alice
删除之后和Bob
之前,后者将引用不存在的部门。
答案 1 :(得分:0)
删除Department
可能会在交易结束时被删除,这就是为什么如果在同一事务中同时删除Employee
,就会发现这种行为。
如果你尝试每个事务只删除Employee
个中的一个,你应该在提交期间得到一个constrant违规错误(除非你的数据库模式中有ON DELETE CASCADE
之类的东西),因为Hibernate确实删除了Department
此时此刻。
此外,我认为在这种关系中使用CascadeType.ALL
是不合理的,因为Employee
并非逻辑上拥有其Department
,我相信你这样做仅用于说明目的。