[英]<Sql-insert> for sub-classes
我有一個對象映射如下:
<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-insert是否屬於A類? 如果是這樣,是否期望對對象A進行save()? 保存時如何使其識別B和C的其他屬性?
要么
盡管它們屬於同一個表,但是使用一個存儲過程為這兩個子類保存是不可能的嗎?
非常感謝您的投入!
我會告訴你我是怎么做到的
<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修改基類實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.