我有一个名为“评论”的课程/表格
<class name="Comment">
<id name="Id">
<generator class="guid"/>
</id>
<property name="ReferenceId" index="Comment_ReferenceId_Index" />
<property name="Contents" length="1024" />
我需要在其他几个类(例如合同
)上创建一个评论包<class name="Contract">
<id name="Id">
<generator class="guid"/>
</id>
<property name="Status"/>
<bag name="Comments">
<key column="ReferenceId" />
<one-to-many class="Comment" />
</bag>
或申请:
<class name="Application">
<id name="Id">
<generator class="guid"/>
</id>
<property name="Status" />
<bag name="Comments">
<key column="ReferenceId" />
<one-to-many class="Comment" />
</bag>
但是这个映射只给我一个外键,我如何创建集合以对几个类进行注释?
答案 0 :(得分:1)
答案是:
将外键的名称设置为“none”,然后休眠不会创建FK,但会跟踪引用。
<class name="Contract">
<id name="Id">
<generator class="guid" />
</id>
<property name="Status" />
<bag name="Comments">
<key column="ReferenceId" foreign-key="none"/>
<one-to-many class="Comment" />
</bag>
答案 1 :(得分:0)
使用此映射,您将获得一个外键,因为您已经以这种方式显式配置它。对于两个父类,<key column="...">
与ReferenceId
列相同,这意味着NHibernate正在尝试为ReferenceId
和Application
创建Contract
外键,这可以不行。
最简单的方法是为您的键列指定不同的名称,例如ContractId
和ApplicationId
。
如果您想要一个ReferenceId
列引用Contract
或Application
,而不是两者,则必须在您的{{1并Contract
映射 - see this article。