我想澄清一个关于 Hibernate
功能的假设。假设我有一个 A
类,@OneToMany
映射到 B
。这些 B 每个都有一个 A
父引用以支持 A 上的 mappedBy
属性。
当我从 A
中的集合中删除 B
时,hibernate 是否能够自动清空 B
中的父字段?。从我所做的所有测试来看,当从集合中删除某些内容时,它实际上并没有通过更改子项中的父引用来更新数据库。
This link似乎支持我的主张,因为他们手动取消了父引用,并将其从父 Set
中删除。
最佳答案
每当从两端映射关联时,这些端之一被指定为主动端,而另一端被指定为被动端。 (被动端是使用 mappedBy=
或 inverse="true"
映射的那一端)
Hibernate 不会,也不能在主动端发生变化时更新集合的被动端,因为它只能在刷新时检测到此类变化。因此,调用代码修改关联的两端被认为是一种很好的做法,以确保对象模型始终处于一致状态。
Hibernate 本身并不关心关联的两端是否一致,因为它只在刷新到数据库时查看 Activity 端。
映射一对多关联时,一对多端应指定为被动端。您链接到的 hibernate 手册中的部分试图解释原因。
关于java - hibernate - 从集合中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7475800/