Отображение Hibernate для управления двунаправленными отношениями с использованием промежуточной таблицы - PullRequest
2 голосов
/ 17 июня 2010

У меня есть иерархия объектов, которая выглядит следующим образом.

Сторона> унаследованная> Организация и лицо Организация> наследуется> Заказчиком, Продавцом Персона> наследуется> Контакт

В базе данных у меня есть следующие таблицы Сторона, Клиент, Продавец, Контакт. Все они имеют соответствующую строку в таблице партии.

Контакт принадлежит либо Продавцу, либо Заказчику. У меня есть поле в таблице контактов для org_party_id. Однако, поскольку организация может быть либо Заказчиком, либо Продавцом, мне нужно иметь возможность просматривать разные таблицы.

Есть ли способ отобразить это в спящем режиме? Или лучший способ управлять им в DB / Hibernate?

1 Ответ

1 голос
/ 17 июня 2010

Создайте новую таблицу с именем Организация с 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>

_

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...