我有一个nHibernate映射类,有几个多对一关系,我有cascade =“all-delete-orphan” . 这适用于只有一个外键关系的类 . 然后我对表格进行映射,这些表格实际上是带有额外列的多对多表格 . 由于有额外的列,我将多对多声明为自己的类,然后将父映射到子类 .
家长:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="ReviewData"amespace="ACS.CSG.ReviewData.Domain">
<class name="Review" table="rcs.tblReview" lazy="true">
<cache usage="read-write"/>
<id name="ID">
<column name="ReviewUID" />
<generator class="guid" />
</id>
<property name="Title" type="string" length="255" column="RTitle" />
<property name="Description" type="string" column="RDescription" />
<bag name="Notes" lazy="true" cascade="all-delete-orphan">
<key column="EntityUID"/>
<one-to-many class="Note" />
</bag>
<bag name="RelatedReviews" lazy="true" cascade="all-delete-orphan">
<key column="EntityID"/>
<one-to-many class="Relation" />
</bag>
</class>
</hibernate-mapping>
没有级联的孩子:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="ReviewData" namespace="ACS.CSG.ReviewData.Domain">
<class name="Relation" table="rcs.tblRelation_Link" lazy="true">
<cache usage="read-write"/>
<id name="ID">
<column name="RelationID" />
<generator class="native" />
</id>
<property name="RelatedID" type="guid" not-null="true" column="RelatedID" />
<many-to-one class="Lookup" name="Relationship" column="Relationship" />
</class>
</hibernate-mapping>
级联的孩子:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="ReviewData" namespace="ACS.CSG.ReviewData.Domain">
<class name="Note" table="rcs.tblNotes" lazy="true">
<cache usage="read-write"/>
<id name="ID">
<column name="NoteID" />
<generator class="native" />
</id>
<property name="Text" type="string" not-null="true" column="NoteText" />
<many-to-one class="Lookup" name="AttachType" column="AttachType" />
</class>
</hibernate-mapping>
我认为问题是表中没有级联的RelatedID . nHibernate并不认为这是一个孤儿,因为RelatedID仍然存在,例如仍然存在现有的参考密钥 . 只有父,LayerUID才真正应该是nHibernate所关注的,而忽略了其余的 . 我需要做的是删除Layer时,RelatedLayer也是如此 . 但是,它只是将LayerUID设置为null . 如何让它删除整个记录呢?