Nhibernate 关联引用未映射-按每个子类策略由表映射的对象集合

Nhibernate 关联引用未映射-按每个子类策略由表映射的对象集合,nhibernate,mapping,table-per-subclass,Nhibernate,Mapping,Table Per Subclass,我在NHibernate映射方面遇到了问题,我不确定我是否犯了noob错误,或者我是否遇到了NHibernate的限制 我有三个域对象,它们与映射hbm.xml文件关联 人 专业人员 个人分类 public class Person { public virtual int Id { get; set; } public virtual string Name { get; set; } } <hibernate-mapping xmlns="urn:nhibernate

我在NHibernate映射方面遇到了问题,我不确定我是否犯了noob错误,或者我是否遇到了NHibernate的限制

我有三个域对象,它们与映射hbm.xml文件关联

专业人员
个人分类

public class Person
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Person"
         table="Person">
    <id name="Id" column="PersonID">
      <generator class="native" />
    </id>
    <property name="Name" />
  </class>
</hibernate-mapping>
公共类人物
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
}
特殊人源于人

public class SpecialPerson : Person
{
    public virtual string MagicString { get; set; }
    public virtual PersonCategory PersonCategory { get; set; }
}

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <joined-subclass name="SpecialPerson"
                   extends="Person">
    <key column="PersonID" />
    <property name="MagicString" />
    <many-to-one name="PersonCategory" column="PersonCategoryID" cascade="save-update" />
  </joined-subclass>
</hibernate-mapping>
公共类专业人员:个人
{
公共虚拟字符串MagicString{get;set;}
公共虚拟PersonCategory PersonCategory{get;set;}
}

PersonCategory收集了一些特殊的人我找到了答案

所以总结是,这与我试图引用派生类型的事实无关。集合的一对多元素中的class属性需要一个完全签名的名称。所以这是有效的

<set name="Persons" table="SpecialPerson">
  <key column="PersonCategoryID" />
  <one-to-many class="NHibernateTest.Domain.Test.SpecialPerson, NHibernateTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</set>

我不知道为什么在这种情况下它需要一个完全签名的名字,而我在其他地方使用了一个简化的名字,没有任何问题

因此,这不是NHIbernate的限制,这是一个很大的解脱,因为我正在考虑重写许多现有映射的讨厌任务

<set name="Persons" table="SpecialPerson">
  <key column="PersonCategoryID" />
  <one-to-many class="NHibernateTest.Domain.Test.SpecialPerson, NHibernateTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</set>