我有以下对象模型:
Element
。 Event
。Element
都包含一包Event
个。 Event
都有一个指向父Element
的指针。 到目前为止 - 非常标准的一对多关系。
但是,我想根据具体的课程策略使用表格。因此,类Element
未映射到数据库。我试图用这种方式解决它:Element
的每个具体后代定义了它自己的Event
个包。这个问题是每个<bag>
元素都包含一个<key>
元素。该关键字指向Parent
的{{1}}属性。它还使Event
表中的Parent
列成为包含Bag的表的外键!但是一列不能是几个表的外键,我在插入时遇到异常。
我还试图让Event
表中的Parent
字段成为多对多的字段。那很有效。但是,当我想使关系双向,意味着,将行李添加到Event
的后代时,我又回到了同样的问题。 Bag =&gt;外键=&gt;插入时的异常。
我确信这个案子并不像看起来那么独特。 提前感谢您的帮助。
答案 0 :(得分:1)
有点晚了,但我有一些建议。
如果您使用“每个具体类的表”,就好像您将映射完全独立的表一样。因此,您需要单独的外键或多对多。
多个到任何商店的类型名称和NH知道外键指向的位置。但是对这样的外键有限制是不可能的。
如果你有几个包含相同类型物品的行李,请确保它们都定义了不同的外键:
<class name="A">
<!-- ... -->
<bag name="Events">
<key column="A_FK"/>
<one-to-many class="Event"/>
</bag>
</class>
<class name="B">
<!-- ... -->
<bag name="Events">
<key column="B_FK"/>
<one-to-many class="Event"/>
</bag>
</class>
您可以对此类外键具有外键约束,但不能使用非null约束,因为只使用其中一个外键。
要真正只有一个包含所有约束的外键,您需要将该元素映射到一个单独的表。