【问题标题】:Cascading delete for optional inverse joins可选反向连接的级联删除
【发布时间】:2012-07-31 11:16:35
【问题描述】:

我们的一个实体类有以下简化映射:

 <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(如果存在),然后才删除父级?

【问题讨论】:

    标签: join nhibernate cascading-deletes inverse nhibernate-cascade


    【解决方案1】:

    你想要的是被 Inverse() 覆盖的默认行为,它告诉它不能删除另一部分,因为它拥有自己。要么摆脱 Inverse() 要么以其他方式处理删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-30
      • 2012-09-21
      • 1970-01-01
      • 2011-08-22
      • 2013-03-26
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      相关资源
      最近更新 更多