我有一个如下的对象层次结构。使用中间表来管理双向关系的休眠映射
方>由>组织和个人 组织继承>由>客户继承,供应商 人>由>联系
在我有以下表 党,客户,供应商,联系人数据库继承。他们在Party表中都有相应的行。
联系人属于供应商或客户。我在org_party_id的联系人表中有一个字段。但是,由于组织可以是客户或供应商,我需要能够查看不同的表格。
有没有办法在休眠状态下映射它?或者,在DB/Hibernate中管理它的更好方法是?
我有一个如下的对象层次结构。使用中间表来管理双向关系的休眠映射
方>由>组织和个人 组织继承>由>客户继承,供应商 人>由>联系
在我有以下表 党,客户,供应商,联系人数据库继承。他们在Party表中都有相应的行。
联系人属于供应商或客户。我在org_party_id的联系人表中有一个字段。但是,由于组织可以是客户或供应商,我需要能够查看不同的表格。
有没有办法在休眠状态下映射它?或者,在DB/Hibernate中管理它的更好方法是?
创建一个新的表名为组织有2场org_party_id和org_party_type。
每个org_party_id匹配对子级匹配Customer.id如果org_party_type是客户或一个Vendor.id如果org_party_type是VENDOR。
更改的映射客户和供应商成为组织的子类。 (见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>
_
更新 - 使用常规的子类,而不是一个连接子类。 – 2010-06-17 16:42:20
您是否建议将客户和供应商表合并到组织表中或创建其他组织表?我不能做前者。如果是后者,组织表如何与党表不同。我可以在派对桌上添加一个类型。 – shikarishambu 2010-06-17 18:44:17
你是对的 - 与党没有什么不同。将该类型添加到Party,然后制作Vendor和Customer子类。 – 2010-06-17 20:15:36