[英]Polymorfic many-to-one NHibernate Mapping
我正在嘗試映射以下類:
PessoaFisica和PessoaJuridica 繼承了 Pessoa 。 客戶與Pessoa有關聯 ,可能是PessoaJuridica或PessoaFisica 。
當我保存Cliente對象與PessoaFisica,例如,多數民眾贊成確定。 但是,當我嘗試更新,我設置屬性佩索阿從Cliente到PessoaJuridica並嘗試更新,它更新,但它產生的表TB_PESSOA和舊行新行,在PessoaFisica不會被刪除。 它將為PessoaJuridica創建一個新行,但仍保留舊行。 我的映射XML有什么問題? 為什么NHibernate在插入新的多態對象之前不刪除舊行?
這些是我正在使用的映射文件
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="SALClassLib.Masterdata.Model" assembly="SALClassLib">
<class name="Pessoa" table="TB_PESSOA">
<id name="Id">
<column name="ID_PESSOA" not-null="true"/>
<generator class="increment" />
</id>
(other properties...)
<joined-subclass name="PessoaFisica" table="TB_PESSOA_FISICA">
<key column="ID_PESSOA" />
(other properties...)
</joined-subclass>
<joined-subclass name="PessoaJuridica" table="TB_PESSOA_JURIDICA">
<key column="ID_PESSOA" />
(other properties...)
</joined-subclass>
</class>
<class name="Cliente" table="TB_CLIENTE">
<id name="Id">
<column name="ID_CLIENTE" not-null="true"/>
<generator class="increment" />
</id>
<many-to-one name="Pessoa" class="Pessoa" cascade="all" column="ID_PESSOA" not-null="true" unique="true" />
謝謝
NHibernate級聯在這里得到了很好的解釋: NHibernate級聯:所有,全部刪除孤兒和保存更新之間的區別
選項之一是cascade="all-delete-orphan"
,它可以被視為您的要求。
僅在父子場景(無父==>沒有子)或一對一映射中,級聯刪除孤兒才是正確的。 (即反之亦然)
對於您的情況,您確實要求刪除引用的對象。 但是NHibernate(沒人能知道)是否可以被其他“孩子”引用。
如果您需要刪除以前分配的Person
,則始終可以在代碼中進行-但要明確
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.