2011-09-19 116 views
4

我想澄清一个假设,我已经做了关于Hibernate的功能。假设我有一个类A@OneToManyB的映射。这些B的每一个都具有A家长参考,以支持A.休眠 - 从集合中删除项目

一个mappedBy属性当我在A从集合中删除B,不冬眠有能力的B内自动空出父字段?从我完成的所有测试中,当从集合中删除某些东西时,它并不通过更改子项中的父引用来实际更新数据库。

This link似乎支持我的说法,因为他们手动清空父引用,并将其从父级Set中删除。

回答

6

无论何时从两端映射关联,其中一个端点被指定为活动端点,一个被动端点。 (被动端是一个使用mappedBy=inverse="true"映射)

Hibernate并不,并且当活性端被改变不能,更新的集合的被动端,因为它只能在冲洗时间检测这样的变化。因此,调用代码修改关联的两端是确保对象模型始终处于一致状态的良好习惯。

Hibernate本身并不关心关联的两端是否一致,因为它只在冲刷到数据库时查看活动端。

当映射一对多关联时,一对多结束应该被指定为被动。您链接的hibernate手册部分试图解释原因。