我想澄清一下关于Hibernate
功能的假设。假设我有一个A
类,其中@OneToMany
与B
的映射关系。每个B都有一个A
父引用,以支持A上的mappedBy
属性。
当我从B
中的集合中删除A
时,hibernate是否能够自动清空B
内的父字段?从我所做的所有测试中,当从集合中删除某些内容时,它实际上并不通过更改子项中的父引用来更新数据库。
This link似乎支持我的声明,因为它们会手动清空父引用,并将其从父Set
中删除。
答案 0 :(得分:6)
每当从两端映射关联时,其中一个端被指定为活动端,而另一个端被指定为被动端。 (被动端是使用mappedBy=
或inverse="true"
)
当活动结束发生变化时,Hibernate不会也不能更新集合的被动端,因为它只能在刷新时检测到这些变化。因此,调用代码来修改关联的两端以确保对象模型始终处于一致状态被认为是一种良好的做法。
Hibernate本身并不关心关联的两端是否一致,因为它只是在刷新数据库时查看活动结束。
在映射一对多关联时,一对多端应被指定为被动。您链接到的hibernate手册中的部分试图解释原因。