Hibernate однонаправленная ассоциация «один ко многим» - почему таблица соединений лучше?

В этом документе (прокрутите вниз до раздела «Однонаправленный»):

http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-mapping-association-collections

в нем говорится, что однонаправленная ассоциация «один ко многим» с таблицей соединений гораздо предпочтительнее, чем просто использование столбца внешнего ключа в принадлежащей сущности. Мой вопрос в том, почему это гораздо предпочтительнее?


person UrLicht    schedule 20.08.2009    source источник
comment
см. stackoverflow.com/questions/2092611/   -  person Adrien Be    schedule 23.10.2012


Ответы (2)


Рассмотрим ситуацию, когда принадлежащий тип сущности также может принадлежать другому родительскому типу сущности. Вы размещаете ссылки внешнего ключа в принадлежащей таблице на обе родительские таблицы? Что делать, если у вас есть три типа родителей? Он просто не подходит для больших проектов.

Присоединяемая таблица отделяет соединение, так что принадлежащая таблица не знает родительских таблиц, что позволяет элегантно масштабировать дизайн.

person skaffman    schedule 20.08.2009
comment
См. разницу между внутренними операциями SQL, вызываемыми в таблице соединений и внешним ключом, на странице stackoverflow.com/q/18333198/418439. - person Lee Chee Kiam; 22.08.2013

Если дочерняя сущность имеет только один родительский тип, то нет необходимости в таблице соединений. Я сделал это с помощью JPA (с спящим режимом).

Преимущества: На один стол меньше. Возможно, лучшая производительность. Нет "для чего эта таблица?" тип вопросы.

Недостаток: с точки зрения объектно-ориентированного программирования вводится дополнительная зависимость между дочерним и родительским элементами. На практике это, вероятно, не так уж и важно, поскольку отношения у ребенка носят частный характер.

e.g. 
parent:
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL)
@MapKey(name = "name")
private Map children;

child:
@ManyToOne(optional = false)
private Parent parent;
person Conor    schedule 20.08.2009
comment
не могли бы вы подробнее рассказать о недостатках - person Aravind Yarram; 01.02.2011
comment
Просто обратите внимание, что с JPA 2.0 ссылка дочернего элемента на родителя больше не требуется. Просто используйте аннотацию @JoinColumn для родителя. - person Edy Bourne; 26.10.2014
comment
@EdyBourne - Вы знаете, какая версия Hibernate добавила поддержку для этого? - person Snekse; 11.09.2015