Hibernate – пример отображения один к одному One-To-One

Рассмотрим как реализовать отношение один-к-одному с помощью Hibernate.

Используемые технологии:

Hibernate 5.0.1.Final

Maven 3.2.5

IntelliJ IDEA 14

MySQL 5.6.25

1. Описание задачи

Связь один-к-одному используется, когда необходимо отобразить разную по сути информацию, которую удобно хранить в разных таблицах, но жестко связанную. Т.е. одной записи из таблицы 1 соответствует одна запись в таблице 2.

2. Структура проекта

HibernateOneToOne sturcture

Имеются две таблицы employee и address. Для каждого сотрудника может быть указан только один адрес и каждый адрес соответствует только одному сотруднику. Настройки Hibernate, MySQL описаны в первой статье Hibernate – быстрый старт. Пример приложения Hello World.

Схема таблиц для этой статьи показана ниже. Мы будем использовать только две таблицы: address и employee.

Hibernate relationship table

3. Описание сущностей

Сущность EmployeeEntity:

Сущность AddressEntity:

В начале каждой сущности указаны методы для связи двух таблиц.

Здесь нужно обратить внимание на использование атрибута mappedBy и аннотации @JoinColumn. Код будет работать независимо от того в какой из сущностей будет указан @OneToOne(mappedBy = «»), а в какой @JoinColumn(name = «», referencedColumnName = «»), но есть рекомендация использовать @JoinColumn в той сущности, которая имеет физическую информацию, а не ссылку foreign key (в примере один-ко-многим это легче для понимания, чем в один-к-одному, где связь и так прямая).  В этом примере так же необходимо указать для addressId значения insertable = false, updatable = false. Для лучшего понимания этих аннотаций рекомендую попробовать поменять местами указание mappedBy и @JoinColumn и посмотреть какие изменения потребуется внести.

4. Методы доступа к БД

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

5. Тестирование

Результат:

 

Исходные коды

Hibernate OneToOne — исходники

HibernateOneToOne SQL — база данных из статьи

Share Button
7
27789 Total Views 1 Views Today

Добавить комментарий