【发布时间】:2012-09-25 15:27:52
【问题描述】:
我将通过一个人为的示例来说明我的问题,以尽量使其简单易懂。然而我真正的问题是遗留代码,所以我不能改变架构或类似的东西。
我的代码中每个类层次结构都有一个表。假设 Customer1 和 Customer2。它们具有唯一的鉴别器值(分别为 1 和 2)。每个客户可以有 0 个或多个地址。地址存储在一个表中。此表存储对客户 ID 和客户鉴别器值的引用。在地址映射中我有:
<any name="customer" meta-type="CustomerMetaType" id-type="long">
<column name="customerid" not-null="true" />
<column name="discriminator" not-null="true" />
</any>
这很好。但是在我的 customer1 和 customer2 映射中,我有:
<set name="addresses" outer-join="false">
<key column="customerid"/>
<one-to-many class="Address"/>
</set>
这有一个问题,即使用 id 1 加载 customer1 会为 id 2 的 customer2 获取任何地址。我最初的修复尝试是向集合中添加多个键:
<key>
<column name="customerid"/>
<column name="discriminator"/>
</key>
但是,当我这样做时,我得到了以下异常:
org.hibernate.MappingException: 外键必须与引用的主键具有相同的列数)
有没有人可以解决这个问题。有没有办法将描述符映射到类作为某种虚拟复合键?或者我可以对集合映射做些什么来将其限制在特定的客户表中?
【问题讨论】:
标签: hibernate mapping set table-per-class