我们的实体类之一有以下简化映射:
<class name="Parent" table="tParent">
<id name="Id">
<column name="ParentId" sql-type="bigint"/>
<generator class="native"/>
</id>
<join table="tOneToOneComponent" optional="true" inverse="true">
<key column="ParentId" on-delete="cascade"/>
<property name="Someprop"/>
</join>
</class>
基本上,它与关系另一端的外键是一对一的(这就是我们设置“逆”的原因)。此外,Parent 在 tOneToOneComponent 中可能没有任何记录(因此出现 optional="true")。
我知道,不推荐这样的连接,但我们的系统有点老旧,我们没有时间重新设计它。
我们希望 NHibernate 在 Parent 被删除时删除相关的 tOneToOneComponent。
当然,我们可以在 SQL 服务器上级联删除操作,但是我们需要清除 NHibernate 缓存以确保 tOneToOneComponent 不会停留在缓存中的某个位置。
因此,我们将 on-delete="cascade" 添加到但现在当我们删除 Parent 时,SQL 说:
The DELETE statement conflicted with the REFERENCE constraint
看来,NHibernate 正试图以错误的顺序删除记录。
如何告诉 NHibernate 先删除 tOneToOneComponent (如果它存在),然后才删除父级?