Создайте новую таблицу с именем Организация с 2 полями org_party_id и org_party_type .
каждая org_party_id , которые будут совпадатьсоответствует Customer.id , если org_party_type является ЗАКАЗЧИКОМ, или Vendor.id , если org_party_type имеет значение VENDOR.
Измените сопоставления Customer и Vendor на подклассы организации.(См. Справочное руководство . Установите org_party_type в качестве дискриминатора .
Теперь установите сопоставление Contact вуказывает на организацию.
Это отвлечет от организационной части клиентов и поставщиков , так что вы сможете работать с ними последовательно. Возможно, вы захотите создать Организация интерфейс в вашем коде, так что абстракция является последовательной.
ОБНОВЛЕНО На основании ваших комментариев (и перечитывая вопрос), это выглядит как объединенныйподзапрос - ваша лучшая ставка. Это означает, что вам не нужно добавлять org_party_type, поскольку подклассы объединяются с помощью идентификатора. Например:
<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>
_