【发布时间】:2010-08-12 21:10:24
【问题描述】:
行为不明确和/或危险的休眠映射问题。我有一个一对多的关系,它有一个级联删除孤儿条件和一个 where 条件来限制集合中的项目。在这里映射 -
<hibernate-mapping>
<class name="User" table="user" >
<!-- properties and id ... -->
<set table="email" inverse="true" cascade="all,delete-orphan" where="deleted!=true">
<key column="user_id">
<one-to-many class="Email"/>
</set>
</class>
</hibernate-mapping>
现在假设我有一个与一个或多个电子邮件对象相关联的用户对象,其中至少一个具有 deleted 属性的“真”值。当我在 User 对象上调用 session.delete() 时会发生以下哪两种情况?
- 用户和所有电子邮件对象(包括已删除=true 的对象)都将被删除
- 删除的 User 和 Email 对象!=null 被删除。
一方面,场景 1) 忽略了 where 条件,根据领域模型,这可能不正确。但是在场景 2 中)如果父级被删除,并且子(电子邮件)表的连接键上有外键约束,那么删除命令将失败。发生了什么,为什么?这只是 Hibernate 的功能如何模棱两可的另一个例子吗?
【问题讨论】:
标签: java hibernate orm data-mapping