Я покажу вам, как я это сделал
<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