[英]Spring boot hibernate bidirectional mapping many to one can not established relationship
[英]Hibernate mapping to manage bidirectional relationship using intermediate table
我有一个如下的对象层次结构。
缔约方>由>组织和人员继承>由>客户,供应商人员>继承>联系
在数据库中,我具有下表Party,Customer,Vendor,Contact。 它们在“聚会”表中都有对应的行。
联系人属于供应商或客户。 我在Contact表上有一个org_party_id的字段。 但是,由于组织可以是客户或供应商,因此我需要能够查看不同的表。
有没有办法在冬眠中映射它? 还是在DB /休眠模式下管理它的更好方法?
使用2个字段org_party_id和org_party_type创建一个名为Organization的新表。
如果org_party_type为CUSTOMER,则每个将匹配的org_party_id与Customer.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.