2

我有一个对象层次结构如下。

当事人 > 继承者 > 组织和人员组织 > 继承者 > 客户、供应商人员 > 继承者 > 联系人

在数据库中,我有以下表格Party、Customer、Vendor、Contact。它们在 Party 表中都有对应的行。

联系人属于供应商或客户。我在 org_party_id 的联系人表上有一个字段。但是,由于组织可以是客户或供应商,我需要能够查看不同的表。

有没有办法在休眠中映射它?或者,在 DB/hibernate 中管理它的更好方法?

4

1 回答 1

1

创建一个名为Organization的新表,其中包含 2 个字段org_party_idorg_party_type

如果org_party_type是 CUSTOMER,则每个org_party_id匹配一个Customer.id ,如果org_party_type是 VENDOR,则匹配一个Vendor.id

将客户供应商的映射更改为组织的子类。(参见参考手册。将org_party_type设置为鉴别器。

现在,将Contact的映射设置为指向 Organization。

这将抽象出客户供应商的组织部分,以便您可以始终如一地处理它们。您可能还想在代码中创建一个组织接口,以便抽象是一致的。

更新 根据您的评论(并重新阅读问题),看起来加入子查询是您最好的选择。这意味着您实际上不需要添加 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>

_

于 2010-06-17T15:53:43.003 回答