JPA规范中对此进行了记录。
第 3.2.4 节(节选):
应用于实体X的刷新操作的语义如下:
- 如果X是受管实体,则将其同步到数据库。
- 对于由X的关系引用的所有实体Y,如果已使用级联元素值Cascade = PERSIST或Cascade =
ALL注释了与Y的关系,则对Y应用持久性操作
第 3.2.2 节(节选):
应用于实体X的persist操作的语义如下:
- 如果X是已删除的实体,则它将被管理。
orphanRemovalJPA
javadoc:
(可选)是否 将删除操作 应用于已从关系中删除的实体,以及是否将删除操作应用于这些实体。
orphanRemovalhibernate文档:
如果一个实体从删除
@OneToMany集合或相关实体是由非关联@OneToOne的关联,这种关联的实体可以 标记为删除
,如果orphanRemoval设置为true。
因此,您将雇员
E从部门中删除
D1,并将其添加到部门中
D2。
然后,Hibernate将部门
D1与数据库同步,发现该部门
E不在员工列表中,并标记
E为删除。然后,它
D2与数据库同步,并将
PERSIST操作级联到员工列表(第3.2.4节)。由于
E现在位于此列表中,因此级联将应用于此列表,并且Hibernate取消安排删除操作的时间表(第3.2.2节)。
您可能还想看看这个问题。
“如果orphanRemoval
设置为true
这种关系的反面会发生什么?”
您已经将它设置在反面(反面是声明的那一面
mappedBy)。如果你的意思是,如果它被设置在什么 其他
方面(
@ManyToOne在这种情况下),那就不是为什么没有在这样的属性意义和的
@ManyToOne和
@ManyToMany。



