Отношение один ко многим между 3 сущностями в Учении 2 - PullRequest
1 голос
/ 13 августа 2011

У меня есть три объекта: Пользователь, Офис и Номер телефона.У пользователя много телефонных номеров, и в офисе тоже много телефонных номеров.

Проблема заключается в том, как представить отношения этих сущностей в Учении 2.

  1. Сначала япопытался использовать двунаправленные связи «один ко многим» («Пользователь -> имеет много -> PhoneNumbers») (Office -> «есть много» -> «PhoneNumbers»), «PhoneNumber» имеет два поля сопоставления, одно для пользователя и другое для Office.Это решение не работает, поскольку один из внешних ключей сопоставления не может быть нулевым.

  2. Мой второй подход заключался в использовании двух сущностей и одного суперкласса для PhoneNumber.Суперкласс PhoneNumber определил все общие поля, кроме поля отображения.Сущности UserPhoneNumber и OfficePhoneNumber расширили сущность PhoneNumber и указали другое поле сопоставления и другую таблицу.(одна таблица для OfficePhoneNumbers, другая для UserPhoneNumbers)

    Это решение действительно работает, но довольно уродливо иметь 3 класса для представления одной простой сущности.

  3. Мой третийподход заключается в использовании однонаправленного отображения один ко многим.Это устранит необходимость в поле отображения для объекта PhoneNumber.Проблема в том, что когда я использую каскадное удаление для поля многие ко многим, это нарушает ограничение целостности при удалении записей.

    Когда я опускаю опцию каскадного удаления, после удаления пользователя или офиса PhoneNumber остается в базе данных (но запись в таблице сопоставления удаляется).

Каков наилучший способ справиться с этим типом ассоциации?

Спасибо

1 Ответ

0 голосов
/ 15 августа 2011

Я наконец решаю проблему, связанную с (возможно, самым хорошим) решением 1).Проблема была в непонимании атрибута mappedBy, который должен указывать поле сущности, а не поле базы данных.

...