Один ко многим нанесен на карту - PullRequest
1 голос
/ 17 октября 2011

У меня есть отношение один ко многим между классом Person и Address. Согласно Hibernate doc многие стороны всегда являются владельцами отношений, то есть многие стороны не должны определять элемент mappedBy.

в моем случае один человек может иметь несколько адресов, поэтому он соответствует одной стороне, а адрес - многим. Если я не определяю элемент mappedBy в обоих классах, какой класс становится владельцем отношений?

Всегда ли в таблице владельца отображается сопоставление внешнего ключа?

Ответы [ 2 ]

3 голосов
/ 17 октября 2011

Да, таблица объекта-владельца всегда является таблицей с внешним ключом.

Жаль, что авторы спецификации JPA решили назвать эту сущность «владельцем» отношений. Это имя противоречит терминологии, связанной с агрегацией, которая часто используется одновременно. Например, в вашем случае это лицо владеет адресом (если вы удалите человека, вы удалите все его адреса; если вы удалите адрес, вы не удалите лицо, которому он принадлежит). Однако именно этому адресу принадлежит отношение между лицом и адресом.

Действительно, «сторона-владелец» просто означает «сторону, у которой есть таблица, которая фактически определяет внешний ключ, используемый для записи отношения».

2 голосов
/ 17 октября 2011

Если вы не укажете mappedBy, у вас нет двунаправленной связи. Вместо этого у вас будет два однонаправленных отношения.

В отношении один-ко-многим внешний ключ должен находиться в таблице владельцев или в отдельной таблице соединений. Вы не можете иметь это в таблице одна сторона отношения один ко многим. Не имеет смысла иметь его в одну сторону, потому что вы не можете отобразить много значений (внешние ключи, ссылающиеся на таблицу многих сторон) в один столбец одной строки с JPA.

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