5

我有了一个一对一的映射与“FormSubmission”实体“面试”实体,面试实体占主导地位的侧面可以这么说,映射是:NHibernate的 - 一到一个映射与级联全删除,孤儿,不删除孤儿

<class name="Interview"> 
    <id name="Id" column="Id" type="Int64"> 
     <generator class="identity" /> 
    </id> 

    // other props (snip).... 

    <one-to-one name="Submission" class="FormSubmission" 
     cascade="all-delete-orphan" /> 
</class> 

<class name="FormSubmission"> 
    <id name="Id" column="Id" type="Int64"> 
     <generator class="foreign"> 
      <param name="property">Interview</param> 
     </generator> 
    </id> 

    // other props (snip).... 

    <one-to-one name="Interview" class="Interview" 
     constrained="true" cascade="none" /> 
</class> 

两个实体都与面试充当聚合根集合的一部分。我试图通过Interview实体保存/更新/删除FormSubmission,因此我已将关联的访问结束映射为cascade =“all-delete-orphan”。例如,我可以创建一个新的FormSubmission,就像这样:

myInterview.Submission = new FormSubmission(myInterview); 
InterviewRepository.Save(myInterview); 

...这工作得很好,FormSubmission被保存。不过,我似乎无法删除的,我试图做这样的FormSubmission:

myInterview.Submission = null; 
InterviewRepository.Save(myInterview); 

...但是这似乎并没有删除FormSubmission。我试着将null分配给协会的两面:

myInterview.Submission.Interview = null; 
myInterview.Submission = null; 
InterviewRepository.Save(myInterview); 

我甚至试过设置级联=“全删除,孤儿”的FormSubmission的一面,但似乎没有任何工作。我错过了什么?

回答

5

也许这不是回答你想要什么。根据这个问题,“全删除,孤儿”级联不支持主键一到一个关联关系:https://nhibernate.jira.com/browse/NH-1262。即使外键一个-to-one关联最容易忽略的 “全删除,孤儿” 级联:

<class name="Interview"> 
    <id name="Id" column="Id" type="Int64"> 
     <generator class="identity" /> 
    </id> 

    <property name="Name" /> 

    <many-to-one name="Submission" unique="true" cascade="all-delete-orphan" /> 
</class> 

<class name="FormSubmission"> 
    <id name="Id" column="Id" type="Int64"> 
     <generator class="identity" /> 
    </id> 

    <property name="Name" /> 

    <one-to-one name="Interview" cascade="all-delete-orphan" property-ref="Submission" /> 
</class> 

编辑: jchapman suggests使用拦截器(事件侦听器更优选在NH2.x及更高版本)模仿这个功能听起来很有趣,但我还没有清楚如何实现这样的拦截器/事件监听器。

+0

噢人,这太差劲了!我想知道他们不支持它的理由是什么?从法比奥毛罗的回答中的口吻来判断:“与”全部删除孤儿“是一对一的?我想他认为这种映射是一个坏主意,但我想知道为什么? – 2011-04-19 08:01:27

+0

很难说,这是直接针对法比奥的问题:)。反正它似乎是Hibernate 3.5(一岁),根据这个问题http://opensource.atlassian.com/projects/hibernate/browse/HHH-2608已经实施。不知道Hibernate和NHibernate版本是如何相关的... – 2011-04-19 19:45:25

+1

[NH-1262问题](https://nhibernate.jira.com/browse/NH-1262)现在在即将到来的4.1版本中被标记为已解决。 – 2016-05-10 08:02:55

相关问题