繁体   English   中英

Hibernate映射使用中间表管理双向关系

[英]Hibernate mapping to manage bidirectional relationship using intermediate table

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

缔约方>由>组织和人员继承>由>客户,供应商人员>继承>联系

在数据库中,我具有下表Party,Customer,Vendor,Contact。 它们在“聚会”表中都有对应的行。

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

有没有办法在冬眠中映射它? 还是在DB /休眠模式下管理它的更好方法?

使用2个字段org_party_idorg_party_type创建一个名为Organization的新表。

如果org_party_type为CUSTOMER,则每个匹配的org_party_idCustomer.id匹配如果org_party_type为VENDOR,则与Vendor.id匹配

客户供应商的映射更改为组织的子类。 (请参阅参考手册 。将org_party_type设置为discriminator

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

这将抽象出“ 客户”和“ 供应商”的组织部分,以便您可以始终如一地处理它们。 您可能还希望在代码中创建一个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>

_

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM