我在NHibernate中使用每个子类的表映射继承。我有一个父Attribute
表和一个子AccountAttribute
表。子AccountAttribute
表中有另一个外键到CustomerProfile
表。 CustomerProfile
表与AccountAttribute
表的关系为零或更多;意思是我的AccountAttributes
课程中会有CustomerProfile
的集合。
如何在我的NHibernate映射中将CustomerProfile
表映射到AccountAttribute
表,以便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>
帐户对象的映射
<?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>
谢谢,
凯尔
答案 0 :(得分:0)
我认为您的问题是由于您已在表格中为您的子类指定了自己的主键,即AccountAttribute_id
中的AccountAttribute
。
如您所说,您正在使用 table-per-subclass 所有子类表都应该使用超类主键,因此AccountAttribute
表应该只有Attribute_id
}作为主键,也是返回Attribute
表的外键。
完成这些更改后,您的映射应该可以正常运行,因为它使用了正确的<key />
参考文献: