簡體   English   中英

多態多對一NHibernate映射

[英]Polymorfic many-to-one NHibernate Mapping

我正在嘗試映射以下類:

PessoaFisicaPessoaJuridica 繼承了 Pessoa 客戶Pessoa關聯 ,可能是PessoaJuridicaPessoaFisica

當我保存Cliente對象與PessoaFisica,例如,多數民眾贊成確定。 但是,當我嘗試更新,我設置屬性佩索阿ClientePessoaJuridica並嘗試更新,它更新,但它產生的表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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM