Реализация связи один-ко-многим в Java с помощью Hibernate

Реализация связи один-ко-многим в Java с помощью Hibernate.

Update:

На сайте есть еще один пример один-ко многим для Hibernate. В процессе работы над другими статьями получилось две разных. Поэтому для тех, кому будет что-то непонятно здесь, могут обратиться в другой, почти такой же пример.

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

Hibernate 5.0.1.Final

Maven 3.2.5

IntelliJ IDEA 14

MySQL 5.6.25

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

Связь один-ко-многим используется, когда записи из таблицы А может соответствовать 0 или более записей в таблице Б и для каждой записи из Б есть 1 запись таблицы А.

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

HibernateOneToMany sturcture

Основа взята из Hibernate – пример отображения один к одному One-To-One. Все настройки остались прежними. В этой части были добавлены несколько таблиц и необходимый Java код, который будет описан в этой статье. Схема таблиц:

Hibernate relationship table

В примере будем использовать таблицу контактов и сотрудников. У каждого сотрудника может быть несколько телефонов и email’ов, но каждый телефон и почта могут относится только к одному сотруднику.

2.1 pom.xml и hibernate.cfg.xml

pom.xml:

hibernate.cfg.xml:

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

EmployeeEntity:

ContactsEntity:

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

Создаются два контакта, добавляются к сущности EmployeeEntity и сохраняем в базу данных.
Обратите внимание, что контакты добавляются не через setContacts, а addContacts. Посмотрите реализацию этого метода выше.

Результат (сначала была записана запись с одним контактом, потом с двумя):

Hibernate OneToMany contacts_result Hibernate OneToMany empl_result

P.S. в конструкторе new ContactsEntity(«mail@javastudy.ru», «8-495-35-35-35»); перепутал местами переменные 🙂

Исходный код

Hibernate OneToMany src — src

Hibernate OneToMany SQL — база данных с записями

*В исходном коде, доступном для скачивания будет закомментирован код относящийся к варианту один-к-одному (оставил чтобы можно было сравнить реализации). Чтобы не путать читателя, в статье приведен листинг сущностей только с кодом для один-ко-многим.
Share Button
9
23423 Total Views 3 Views Today

5 thoughts on “Реализация связи один-ко-многим в Java с помощью Hibernate

  1. naut:

    Великолепно!

    Реализовал с PostgeSQL, все работает отлично!

    Огромное спасибо!

  2. qwerty:

    к сожалению, в чистом виде скачанное с сайта, не заработало, надо будет разбираться

    а в идеале было бы неплохо реализовать подобное на примере web-приложения и по шагово

    спасибо

  3. Stasyan:

    Статья классная, но ее нужно откорректировать, куча ошибок:

    AppMain:

    строка 38 вызывает org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session, нужно сделать новый объект и его добавлять в Set пример(ContactsEntity contacts2);
    Конструктор класса ContactsEntity указан не верно,  нарушен порядок принимаемых параметров;
    и по мелочи, такие как неточности в классах Entity

    Хотя тут тоже свой плюс, пока ищешь ошибки лучше понимаешь код)

    1. Stasyan:

      редактор с отступами и списками бесполезен,  все равно в бд сохраняет только текст

    2. Stasyan:

      Ошибся, строка 38 в порядке, забыл в класса ContactsEntity указать @GeneratedValue(strategy = GenerationType.IDENTITY)

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