这是我的heirarchy:
class abstract Entity { /*members*/ } // mapped to entity table
class abstract User : Entity { /*members*/ } // mapped to user table
class Employee : User { /*no members*/ } // no table, discriminator = "E"
class Contractor : User { /*no members*/ } // no table, discriminator = "C"
这是我在两个单独的hbm文件中的映射:
<class name="Entity" table="entity" xmlns="urn:nhibernate-mapping-2.2">
<id name="Id" column="id">
<generator class="guid.comb" />
</id>
<property ... />
</class>
<joined-subclass name="User" extends="Entity" table="user">
<key column="id" />
<discriminator column="type" />
<property ... />
<subclass name="Employee" discriminator-value="E" />
<subclass name="Contractor" discriminator-value="C" />
</joined-subclass>
以下是我得到的例外情况:
MappingException:XML验证错误:命名空间'urn:nhibernate-mapping-2.2'中的元素'joined-subclass'在命名空间'urn:nhibernate-mapping-2.2'中具有无效的子元素'discriminator' .
我错过了什么?你能不映射连接子类的有区别的子类层次结构?
2 回答
你想做什么目前是不可能的 .
检查http://www.nhforge.org/doc/nh/en/index.html#inheritance是否允许构造 .
join-subclass在一个单独的表中没有't have a discriminator because it' . 这就是它如何知道子类是什么 . 如果你想使用一个鉴别器,你可以为所有子类使用一个表,你可以使用subclass映射