
Интерфейс Hibernate org.hibernate.SessionFactory является нативным соответствием JPA EntityManagerFactory.
Для настройки нативного интерфейса Hibernate можно использовать файл свойств Java hibernate.properties или XML файл hibernate.cfg.xml. Выбираем второй вариант, и для настройки будут доступны опции для базы данных и сессии. Этот XML файл обычно находится в папке src/main/resource or src/test/resource. Поскольку нам необходима информация для конфигурации Hibernate в тестах, выбираем второе альтернативное расположение.
Листинг 5. Файл конфигурации hibernate.cfg.xml
.png)
- Мы используем теги, чтобы указать на то, что мы настраиваем Hibernate #1, а именно объект SessionFactory #2. SessionFactory — это интерфейс, и нам необходимо иметь один объект SessionFactory для взаимодействия с одной базой данных.
- Указываем свойства JDBC - драйвер #3, URL базы данных #4, имя пользователя #5 и пароль #6 для доступа.
- Мы ограничим число подключений, находящихся в режиме ожидания в пуле подключений базы данных Hibernate, до 50 #7.
- Каждый раз, когда выполняется программа, база данных создается заново с нуля #8. Это идеально для автоматизированного тестирования, когда нам для запуска каждого теста нужна чистая база данных.
Листинг 6. Класс ItemHibernateTest
.png)
- Для создания SessionFactory необходимо создать Configuration #1, чтобы вызывать метод configure и добавить Item к аннотированному классу #2. Выполнение метода configure приведет к загрузке содержимого файла по умолчанию hibernate.cfg.xml.
- Создаем и настраиваем реестр сервисов #3. Реестр ServiceRegistry содержит и контролирует сервисы, которым необходим доступ к SessionFactory
- Создаем SessionFactory, используя созданные ранее конфигурацию и реестр сервисов #4.
- Фабрика SessionFactory, созданная с помощью метода createSessionFactory, который мы определили ранее, передается в качестве аргумента на try with resources, когда SessionFactory реализует интерфейс AutoCloseable #5. Аналогичным образом мы начинаем новую сессию с базой данных, создав Сессию #6, которая также реализуетинтерфейс AutoCloseable . Это наш контекст для всех персистентных операций.
- Получаем доступ к API для стандартных транзакций и начинаем транзакцию на этом потоке выполнения #7.
- Создаем новый экземпляр класса Item и устанавливаем его свойство info #8.
- Экземпляр класса во временном состоянии становится персистентным на стороне контекста персистентности #9.
- Синхронизируем сессию с базой данных и закрываем текущую сессию при автоматическом подтверждении транзакции #10.
- Как и в случае JPA, у нас нет кода SQL и не используется JDBC. В коде Java нет операций CRUD (create, read, update, delete), но можно работать объектно-ориентированным способом с классами, объектами и методами. Перевод на каждый диалект SQL осуществляется посредством объектно-реляционного отображения (ORM), которое также используется для переносимости.