在与NHibernate一起使用union子类时,是否必须为抽象和无表基类指定表?

在与NHibernate一起使用union子类时,是否必须为抽象和无表基类指定表?,nhibernate,inheritance,nhibernate-mapping,Nhibernate,Inheritance,Nhibernate Mapping,我们有一个BaseEntity,所有其他域类都继承它。在此BaseEntity上有一些基本属性。例如,这可能类似于DateLastChange 我们将NHibernate与hbm映射文件一起使用。我试图避免在每个映射文件中映射DateLastChange 我发现了Ayende,这让我相信我可以使用联合子类来实现这一点(参见他最后的方法)。但是,他为抽象类包含了一个表名,而这个表名不在他的表模式中 <class name="Party" abstract="true" tab

我们有一个BaseEntity,所有其他域类都继承它。在此BaseEntity上有一些基本属性。例如,这可能类似于
DateLastChange

我们将NHibernate与
hbm
映射文件一起使用。我试图避免在每个映射文件中映射
DateLastChange

我发现了Ayende,这让我相信我可以使用
联合子类来实现这一点(参见他最后的方法)。但是,他为抽象类包含了一个表名,而这个表名不在他的表模式中

<class name="Party"
    abstract="true"
    table="Parties">
...

...

表是否必须存在,或者NHibernate是否会忽略此属性?然后我可以省略它吗?

我有以下fluentnhibernate中的抽象类:

    public abstract class EntityMapping<TEntity> : ClassMap<TEntity> where TEntity : EntityBase
        {
            protected EntityMapping()
            {
                Id(x => x.Id, "Id")
                    .UnsavedValue("00000000-0000-0000-0000-000000000000")
                    .GeneratedBy.GuidComb()
                    .Index("IX_Lookup");
                OptimisticLock.Version();
                Version(x => x.Version);
Map(x=>x.DateLastChange); // your column
            }
        }
公共抽象类EntityMapping:ClassMap,其中tenty:EntityBase
{
受保护的EntityMapping()
{
Id(x=>x.Id,“Id”)
.UnsavedValue(“00000000-0000-0000-0000-000000000000”)
.GeneratedBy.GuidComb()
.索引(“IX_查找”);
OptimisticLock.Version();
版本(x=>x.Version);
Map(x=>x.DateLastChange);//您的列
}
}
所有其他映射都使用抽象类:

public SomeEntityMap:EntityMapping<SomeEntity>{
   public SomeEntityMap(){
      Map(x=>x.SomeProperty);
   }
}
公共SomeEntityMap:EntityMapping{
公共SomeEntityMap(){
Map(x=>x.SomeProperty);
}
}

这是不需要的。根据(感谢kalki):


...
...
...
...
以及:

如果您的超类是抽象的,请使用abstract=“true”映射它。如果是 不是抽象的,是一个附加表(默认为 上面的示例中),需要保存超类的实例


对不起,我看不出这对我有什么帮助。我专门寻找一个使用union子类和hbm.xml文件的解决方案。我还想使用一种特定的继承方法。千万不要阅读问题中的hbm部分。奇怪的是,为什么你仍然使用hbm文件,同时使用fluent和confORM AvailableType PO。退房
<class name="Payment">
    <id name="id" type="long" column="PAYMENT_ID">
        <generator class="sequence"/>
    </id>
    <property name="amount" column="AMOUNT"/>
    ...
    <union-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
        <property name="creditCardType" column="CCTYPE"/>
        ...
    </union-subclass>
    <union-subclass name="CashPayment" table="CASH_PAYMENT">
        ...
    </union-subclass>
    <union-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
        ...
    </union-subclass>
</class>