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

Создание двунаправленной связи один-к-одному с общим значением поля ID обоих сущностей, устанавливаемым автоматически

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

Такую связь можно сделать двунаправленной. И расширяющая, и расширяемая сущности в таком случае ссылаются друг на друга. Кроме того, если связь двунапрвленная и JPA провайдером в проекте является Hibernate, то можно значительно облегчить создание общего ID и сохранение связанных сущностей в БД.

Читать далее

Создание однонаправленной связи один-к-одному с общим значением поля ID обоих сущностей

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

Проще всего сделать такую связь однонаправленной. Расширяемая сущность в таком случае не содержит поля, ссылающегося на расширяющую. Она может иметь несколько расширяющих сущностей/таблиц и «не знать» об этом. Расширяющая сущность связывается с расширяемой с помощью аннотации @OneToOne.

Читать далее

Отображение в структуру БД иерархии наследования Java с совмещением нескольких стратегий одновременно

Классы сущностей Java могут иметь иерархическую структуру и существует ряд стратегий отображения этой структуры в БД. В частности используются подходы «отдельная таблица на каждый конкретный класс» и «одна таблица для всех наследников». У каждого из подходов есть свои преимущества и недостатки. Hibernate позволяет использовать эти две стратегии одновременно.

Например, если у нас есть класс Person и у него три наследника: Client, Employee и Freelancer, мы можем хранить данные двух наследников (Client и Employee) в одной таблице, а данные Freelancer в отдельной таблице, у которой будет внешний ключ на id общей таблицы.

Читать далее

Отображение в структуру БД иерархии наследования Java по принципу «отдельная таблица на каждый уровень иерархии наследования» с учётом полиморфизма с помощью Hibernate

Классы сущностей Java могут иметь иерархическую структуру и существует ряд стратегий отображения этой структуры в БД. Одной из стратегий является отображение каждого класса, представляющего собой очередной уровень иерархии наследования в отдельную таблицу.

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

То есть, если классы SpecialClient наследует класс Client, а от в свою очередь наследует класс Person, то для отображения данных будут созданы три таблицы (SPECIAL_CLIENT, CLIENT и PERSON), при этом в таблице SPECIAL_CLIENT будет внешний ключ, ссылающийся на CLIENT, а у той — внешний ключ, ссылающийся на PERSON.

Читать далее