Архив метки: @jakarta.persistence.JoinColumn

Двунаправленная связь @ManyToMany. Аннотация @JoinTable в Hibernate

Связи вида многие-ко-многим между двумя таблицами в СУБД создаются с помощью третьей таблицы. Hibernate позволяет не создавать отдельную сущность для соединительной таблицы, а описать её в аннотации @JoinTable. У такой таблицы есть свои ограничения: она содержит только колонки со ссылками на другие таблицы и не содержит других колонок.

Читать далее

Связь @OneToMany между @Embeddable и @Entity классами в Hibernate

Встраиваемый (@Embeddable) класс может содержать поле со списком объектов класса-сущности (@Entity). При этом у данных встраиваемого класса нет своей таблицы и они, как и положено, хранятся в таблице какой-то ещё сущности. Такая организация приводит к возникновению связи один-ко-многим между таблицами классов сущностей, которые в коде напрямую друг с другом не связаны.

Например, если у нас класс-сущность Company, содержащий поле встраиваемого класса Address при этом в классе Address есть поле List<Person> owners, где Person это в свою очередь класс-сущность, то между таблицами COMPANY и PERSON создаётся связь один-ко-многим, хотя между классами Company и Person прямой связи нет.

Читать далее

Однонаправленная связь @OneToMany между сущностями в Hibernate

Создание связи один-ко-многим является типичной задачей. Главным отличием описания такой связи в JPA/Hibernate от описания в БД заключается в том, что если в БД мы всегда описываем связь в ссылающейся таблице, то в Hibernate — это можно сделать в той сущности, на которую ссылаются.

Например, допустим у нас есть человек и у него есть адреса электронной почты. Тогда в БД в таблице EMAIL мы опишем колонку с внешним ключом на таблицу PERSON. Hibernate же позволяет в классе Person создать поле List<Email> emails и, аннотировав его должным образом, описать аналогичную связь. Класс Email же будет описан таким образом, как будто бы он вообще никак не связан с классом Person. Хотя в БД мы по-прежнему получим таблицу EMAIL с внешним ключом на PERSON.

Читать далее

Создание однонаправленной связи один-к-одному со связыванием через третью таблицу

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

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

Читать далее

Создание однонаправленной связи один-к-одному со связыванием через внешний ключ

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

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

Читать далее

Создание двунаправленной связи между классами-сущностями с помощью аннотаций @ManyToOne и @OneToMany в Hibernate

Одной из сильных сторон объектного моделирования предметной области заключается в возможности создавать двунаправленные связи между родительскими и дочерними объектами. Так, если пользователю может соответствовать несколько адресов, то не только класс Address будет содержать поле Person, к которому конкретный адрес относится, но и класс Person может содержать список типа Address со всеми относящимися к нему адресами.

В реляционных базах данных невозможно точно воспроизвести такие отношения. Но Hibernate снимает это несоответствие, позволяя разработчику создавать двунаправленные отношения в объектной модели в Java, продолжая сохранять данные в реляционной модели в БД.

Читать далее

Создание связей типа многие-к-одному между классами-сущностями с помощью аннотации @ManyToOne в Hibernate

Создание простых связей типа многие-к-одному в моделях предметной области полностью соответствует взаимоотношению таблиц в БД. Строки одной из таблиц содержат внешний ключ, ссылающийся на строку другой таблицы. При этом та таблица, на которую ссылаются, об этом «не знает». Во многих случаях в модели предметной области воспроизведение подобных отношений между классами-сущностями оказывается достаточным.

Читать далее