0

我在 NHibernate 中使用每个子类映射继承的表。我有一个父Attribute表和一个子AccountAttribute表。子AccountAttribute表中有另一个指向CustomerProfile表的外键。表CustomerProfile与表有零个或多个关系AccountAttribute;这意味着我将AccountAttributes在我的CustomerProfile课堂上收集。

如何将CustomerProfile表格AccountAttribute映射到我的 NHibernate 映射中的表格,以便CustomerProfile正确地为课程补充水分AccountAttributes

属性: Attribute_Id (PK)

AccountAttribute: AccountAttribute_Id(PK);Attribute_Id (FK);CustomerProfile_Id (FK)

CustomerProfile: CustomerProfile_Id (PK)

Attribute/AccountAttribute 层次结构的映射。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" >
  <class name="Attribute, CustomerProfile" lazy="false">

    <id name="Identifier" column="Attribute_Id" access="field.camelcase">
      <generator class="identity"/>
    </id>

    <joined-subclass name="AccountAttribute, CustomerProfile" table="AccountAttribute" lazy="false">
      <key column="Attribute_Id" />
      <property name="ValueText" column="Value_Txt" access="nosetter.camelcase" />
    </joined-subclass>

  </class>
</hibernate-mapping>

Account 对象的映射

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" >
  <class name="Account, CustomerProfile" lazy="false">

    <id name="Identifier" column="Account_Id" access="field.camelcase">
      <generator class="identity"/>
    </id>

    <!-- How do I map to the AccountAttributes table here to get the correct set? -->
    <bag name="AccountAttributes" access="field.camelcase" table="AccountAttribute">
      <key column="Account_Id" />
      <one-to-many class="AccountAttribute, CustomerProfile"/>
    </bag>

  </class>
</hibernate-mapping>

谢谢,

凯尔

4

1 回答 1

0

我相信您的问题是由于您在表中为子类提供了自己的主键,即AccountAttribute_idAccountAttribute.

正如您所说,您正在使用每个子类的表,所有子类表都应该使用超类主键,因此该AccountAttribute表应该只Attribute_id作为主键,这也是返回Attribute表的外键。

完成这些更改后,您的映射应该可以正常工作,因为它使用了正确的<key />


参考:

于 2011-01-20T00:18:11.900 回答