Связи вида многие-ко-многим между двумя таблицами в СУБД создаются с помощью третьей таблицы. Hibernate позволяет не создавать отдельную сущность для соединительной таблицы, а описать её в аннотации @JoinTable. У такой таблицы есть свои ограничения: она содержит только колонки со ссылками на другие таблицы и не содержит других колонок.
Читать далееАрхив метки: @jakarta.persistence.JoinTable
Двунаправленная связь @OneToMany через таблицу (@JoinTable) в Hibernate
В JPA/Hibernate есть несколько способов описания двунаправленной связи между сущностями. Одним из которых является связь через третью таблицу. Если сущности слабо связаны друг с другом и связи между ними не постоянны, то такой подход подход позволяет избежать null значений в таблицах.
Например, если у нас есть две сущности: Person и Email, которые достаточно независимы друг от друга в том смысле, что не за каждым человеком закреплён адрес почты, а также не про каждый адрес известно чей он, то при создании связи через простой внешний ключ некоторые поля будут содержать null. Если такая ситуация недопустима, то организация связи через третью таблицу, эту проблему решает. Цена решения — затраты на join’ы при выборке.
Читать далееСоздание однонаправленной связи один-к-одному со связыванием через третью таблицу
Не всегда можно и имеет смысл расширять ту или иную таблицу за счёт добавления в неё новых полей. Зачастую удобней и правильней создать ещё одну таблицу и установить между ними связь типа один-к-одному.
Если сущности слабо связаны друг с другом и не могут опираться на разделяемые значения первичных ключей, то связь между ними можно организовать либо с помощью внешних ключей, либо с помощью промежуточной таблицы. Если мы не можем допустить наличия NULL значений в таблице, то вариант с внешним ключом может не подойти и необходимо использовать третью таблицу для связи.
Читать далее