2009-11-10 60 views
1

如下:<Sql-insert>對我有一個對象映射爲子類

<class name="A" table="TableA"> 
    <id name="ID" column="AId" type="Int32" unsaved-value="0"> 
     <generator class="native" /> 
    </id> 
    <discriminator column="Type" type="Int32" /> 
    <property name="Description" /> 
</class> 

<subclass name="B" discriminator-value="0" extends="A"> 
    <property name="B_specific_properties /> 
</subclass> 

<subclass name="C" discriminator-value="1" extends="A"> 
    <property name="C_specific_properties /> 
</subclass> 

我打算使用一個存儲過程來完成插入,而目前B和C使用相同的存儲過程來插入進入桌子。我的問題是與上面映射的對象,sql插入是否屬於類A?如果是這樣,它是否期望對對象A執行save()?當我正在保存時,如何讓它識別B和C的附加屬性?

OR

使用一個存儲過程來保存兩個子類的不可能完成的任務,雖然他們屬於同一個表?

非常感謝您的任何意見!

回答

0

我會告訴你我是如何做到這

<class name="CompanyCharacteristic" table="firma_cecha" abstract="true" discriminator-value="not null"> 
    <id name="Id" column="id_firma_cecha"> 
     <generator class="native" /> 
    </id> 
    <discriminator column="typ_cechy"/> 
    <property name="FriendlyTypeName" column="typ_cechy" insert="false" update="false"/> 

    <property name="All" column="cecha_all" access="nosetter.camelcase"/> 

    <!-- Auditing data --> 
    <property name="UserInserted" access="nosetter.camelcase" column="user_insert" insert="true" update="false"/> 
    <property name="DateInserted" column="data_insert" generated="insert" insert="false" update="false"/> 

    <subclass discriminator-value="Akceptacja kart płatniczych" name="CreditCardAcceptanceCharacteristic"> 
     <property name="DoesIt" column="cecha_dec_1" not-null="true" type="DataAccess.NHibernate.Infrastructure.UserTypes.EnumValueInfoUserType`1[[Domain.Characteristics.YesNoNumericEnum, Domain]], DataAccess"/> 
     <sql-insert> 
      DECLARE @returned decimal(20,0) 
      exec sp_FirmaCecha_Add 
      @TypCechy = 'Akceptacja kart płatniczych', 
      @CechaAll = ?, 
      @UserInsertZrodlo = ?, 
      @CechaDec1 = ?, 
      @IdFirmaCecha = @returned OUTPUT 
      SELECT @returned 
     </sql-insert> 
     <sql-update> 
      exec sp_FirmaCecha_Update 
      @TypCechy = 'Akceptacja kart płatniczych', 
      @UserUpdateZrodlo = ?, 
      @CechaDec1 = ?, 
      @IdFirmaCecha = ? 
     </sql-update> 
     <sql-delete> 
      exec sp_FirmaCecha_Delete ? 
     </sql-delete> 
    </subclass> 

    <sql-insert> 
     raiserror ('CompanyInfoCharacteristic nie moze byc dodwana za pomocą NHibernate',11,1) 
    </sql-insert> 
    <sql-update> 
     raiserror ('CompanyInfoCharacteristic nie moze byc aktualizowana za pomocą NHibernate.',11,1) 
    </sql-update> 
    <sql-delete> 
     raiserror ('CompanyInfoCharacteristic nie moze byc kasowana za pomocą NHibernate.',11,1) 
    </sql-delete> 

正如你看到的每個子類中需要有自己的SQL語句。基類也可以有自己的語句。在這個例子中,我不允許通過NHibernate修改基類實例

+0

感謝您的回覆。所以我明白了,我需要爲對象B和C創建兩個不同的存儲過程,並且如果B和C中屬性的數量不同,那麼傳遞給存儲過程的參數數量將不同於好? – Akey 2009-11-11 15:38:12