Рубрики
Технологии

Один ко многим в Java: когда коллекция в родителе оправдана, а когда — нет

Реляционная модель хранит FK на стороне дочерней таблицы.

В Java у нас два способа отразить эту связь: коллекция в родительской сущности (@OneToMany / List) или ссылка в дочерней (@ManyToOne / long parentId).

Выбор между ними влияет на поведение при записи — и именно здесь большинство решений принимаются без достаточного обоснования.

Тест, который даёт однозначный ответ

Влад Михалча формулирует так: ассоциация @ManyToOne является наиболее естественным способом отображения связи «один ко многим» в базе данных и, как правило, наиболее эффективной альтернативой.

Практический критерий: если убрать коллекцию и заменить её отдельным запросом, какое бизнес-правило перестанет работать?

Если ответ — «никакое, просто список будет получаться отдельным запросом» — коллекция не нужна как часть модели.

Если ответ — «нарушится инвариант» — коллекция оправдана.

Типичные случаи:

Читать далее