Подтвердить что ты не робот

Hibernate - однонаправленная связь для многих - почему таблица соединения лучше?

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Неудобство: С точки зрения ОО существует дополнительная зависимость между ребенком и родителем. На практике это, вероятно, не так уж и много, так как отношения являются частными в ребенке.

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

child:
@ManyToOne(optional = false)
private Parent parent;