我有一个对象层次结构,如下所示。
派对>继承自>组织和人 组织>继承自>客户,供应商 人>继承自>接触
在数据库中,我有以下表格 派对,客户,供应商,联系。所有这些都在Party表中有相应的行。
联系人属于供应商或客户。我在org_party_id的Contact表上有一个字段。但是,由于组织可以是客户或供应商,因此我需要能够查看不同的表。
有没有办法在休眠中映射这个?或者,在DB / hibernate中管理它的更好方法是什么?
答案 0 :(得分:1)
创建一个名为组织的新表,其中包含2个字段 org_party_id 和 org_party_type 。
如果 org_party_type 是CUSTOMER,或者 Vendor.id 每个 org_party_id 匹配 Customer.id >如果 org_party_type 是供应商。将客户和供应商的映射更改为组织的子类。 (请参阅reference manual。将 org_party_type 设置为鉴别器。
现在,将联系人的映射设置为指向组织。
这将抽象出客户和供应商的组织部分,以便您可以始终如一地处理它们。您可能还希望在代码中创建组织接口,以便抽象一致。
<强>已更新强> 根据您的评论(并重读问题),看起来加入子查询是您最好的选择。这意味着您实际上不需要添加org_party_type,因为子类由ID连接。像这样:
<class name="Party" table="PARTY">
<id name="org_party_id" column="uid" type="long">
<generator class="hilo"/>
</id>
<!-- other PARTY properties -->
<joined-subclass name="Customer" table="CUSTOMER">
<key column="customer_id"/>
<property name="name" type="string"/>
<!-- other CUSTOMER properties -->
</joined-subclass>
<joined-subclass name="Vendor" table="VENDOR">
<key column="vendor_id"/>
<property name="name" type="string"/>
<!-- other VENDOR properties -->
</joined-subclass>
</class>
_