这是我的继承结构:

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验证错误:命名空间中的元素'加入sublclass'urn:nhibernate-mapping-2.2'在命名空间中具有无效的子元素'歧视器'runn urn:nhibernate-mapping-2.2'。

我想念什么?您不能映射加入sublclass的歧视子类层次结构吗?

有帮助吗?

解决方案

您想做的目前是不可能的。

查看 http://www.nhforge.org/doc/nh/en/index.html#inheritance 用于允许的结构。

其他提示

加入 - 串行阶级没有歧视器,因为它在单独的表中。这就是知道子类是什么的方式。如果要使用歧视器,则将使用一张表用于所有子类,您将使用 子类 映射

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top