Добавить в корзинуПозвонить
Найти в Дзене
Записки о Java

Spring + Hibernate: Ручная интеграция в Java

Разберём ручную интеграцию Spring и Hibernate — без Spring Boot, без магии, только понимание того, как всё работает "под капотом". Это важно, потому что: <!-- Spring Core + Context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.21</version> </dependency> <!-- Spring ORM (для Hibernate) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>5.3.21</version> </dependency> <!-- Hibernate Core --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.6.15.Final</version> </dependency> <!-- H2 Database (в памяти) --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.1.214</version> </dependency> <!-- JDBC Driver (нужен для соединения) --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.21</version> </dependency> ├── config/ ← Конфигурация Spr
Оглавление
Рисунок: Интеграция Spring и Hibernate в Java
Рисунок: Интеграция Spring и Hibernate в Java

Введение

Разберём ручную интеграцию Spring и Hibernate — без Spring Boot, без магии, только понимание того, как всё работает "под капотом".

Это важно, потому что:

  • Понимание помогает отлаживать ошибки
  • В legacy-проектах часто используется именно такой подход
  • Так вы лучше поймёте, что делает Spring Boot за вас

Что мы будем использовать?

  • Java 11
  • Spring Framework 5.x (через Java Config)
  • Hibernate 5.4+
  • H2 Database (в памяти — для простоты)
  • Maven (управление зависимостями)
  • LocalSessionFactoryBean, HibernateTemplate, HibernateTransactionManager, @Transactional

Шаг 1: Зависимости (Maven — pom.xml)

<!-- Spring Core + Context -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>5.3.21</version>

</dependency>

<!-- Spring ORM (для Hibernate) -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-orm</artifactId>

<version>5.3.21</version>

</dependency>

<!-- Hibernate Core -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-core</artifactId>

<version>5.6.15.Final</version>

</dependency>

<!-- H2 Database (в памяти) -->

<dependency>

<groupId>com.h2database</groupId>

<artifactId>h2</artifactId>

<version>2.1.214</version>

</dependency>

<!-- JDBC Driver (нужен для соединения) -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>5.3.21</version>

</dependency>

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

├── config/ ← Конфигурация Spring

├── entity/ ← Сущности Hibernate

├── dao/ ← Доступ к данным

└── MainApp.java ← Точка входа

Шаг 2: Создаём сущность (Entity)

Рисунок: листинг entity User - часть 1
Рисунок: листинг entity User - часть 1
Рисунок: листинг entity User - часть 2
Рисунок: листинг entity User - часть 2

Шаг 3: DAO (Data Access Object)

DAO — это слой, который работает с базой данных.

Вариант 1: Через HibernateTemplate (устарел, но показателен)

Рисунок: реализация слоя DAO вариант 1 - часть 1
Рисунок: реализация слоя DAO вариант 1 - часть 1
Рисунок: реализация слоя DAO варинат 1 - часть 2
Рисунок: реализация слоя DAO варинат 1 - часть 2

HibernateTemplate устарел с Spring 4.3, но полезен для понимания.
В новых проектах используйте SessionFactory напрямую.

Шаг 4: Конфигурация через Java Config

Создаём конфигурационный класс

Рисунок: конфигурационный класс, часть 1
Рисунок: конфигурационный класс, часть 1
Рисунок: конфигурационный класс, часть 2
Рисунок: конфигурационный класс, часть 2
Рисунок: конфигурационный класс, часть 3
Рисунок: конфигурационный класс, часть 3

Шаг 5: Декларативные транзакции с @Transactional

Добавим сервисный слой, где будем использовать @Transactional.

Рисунок: сервисный слой часть 1
Рисунок: сервисный слой часть 1
Рисунок: сервисный слой часть 2
Рисунок: сервисный слой часть 2

Шаг 6: Запускаем приложение

Рисунок: запуск приложения
Рисунок: запуск приложения

Заключение

Мы реализовали полноценную интеграцию **Spring + Hibernate**.

Пример, рассмотренный в статье, можно найти по адресу:
https://github.com/ShkrylAndrei/blog_yandex/tree/main/src/main/java/info/shkryl/springPlusHibernate/example1