6

这是我的层次结构:

class abstract Entity { /*members*/ } // 映射到实体表
class abstract User : Entity { /*members*/ } // 映射到用户表

class Employee : User { /*no members*/ } // 没有表,discriminator = "E"
class Contractor : User { /*no members*/ } // 没有表,discriminator = "C"

这是我在两个单独的 hbm 文件中的映射:

<class name="Entity" table="entity" xmlns="urn:nhibernate-mapping-2.2">
  <id name="id" column="id">
    <generator class="guid.comb" />
  </id>
  <属性... />
</class>

<joined-subclass name="User" extends="Entity" table="user">
  <key column="id" />
  <鉴别列=“类型” />
  <属性... />
  <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”中具有无效的子元素“鉴别器”。

我错过了什么?你不能映射一个连接子类的可区分子类层次结构吗?

4

2 回答 2

2

join-subclass 没有鉴别器,因为它位于单独的表中。这就是它知道子类是什么的方式。如果您想使用鉴别器,您将为所有子类使用一个表,并且您将使用子类映射

于 2011-01-24T18:00:13.637 回答
2

您想要做的事情目前是不可能的。

检查http://www.nhforge.org/doc/nh/en/index.html#inheritance以获取允许的构造。

于 2011-01-24T20:17:29.507 回答