Что такое Hibernate
В главе про JDBC учебника Java вы писали SQL вручную, заполняли PreparedStatement и переносили каждый столбец ResultSet в объект. ORM (object-relational mapping, объектно-реляционное отображение) берёт эту рутину на себя: один раз описываете, как класс соответствует таблице, а дальше сохраняете и загружаете обычные Java-объекты. SQL библиотека пишет сама.
JPA и Hibernate
Два названия всегда встречаются вместе:
| Название | Что это |
|---|---|
| Jakarta Persistence (JPA) | Стандарт: набор аннотаций и интерфейсов в пакете jakarta.persistence. Работающего кода в нём нет |
| Hibernate ORM | Самая популярная реализация этого стандарта плюс собственные возможности в пакете org.hibernate |
Код пишут по стандарту — @Entity, EntityManager, запросы JPQL, — а работу под капотом выполняет Hibernate. Там, где стандарта не хватает (натуральные ключи, пакетная загрузка, статистика), используют классы Hibernate напрямую.
Версии
Курс написан для Hibernate ORM 7.4 (7.4.12.Final), который реализует Jakarta Persistence 3.2. Hibernate 7 требует Java 17 или новее, примеры запускаются на Java 25. Hibernate 8 на момент написания находится в стадии бета-версий.
JDBC и Hibernate рядом
Сохранение статьи через JDBC:
// src/main/java/com/example/blog/JdbcExample.java
try (PreparedStatement st = conn.prepareStatement("insert into post (id, title) values (?, ?)")) {
st.setLong(1, 1);
st.setString(2, "Привет, Hibernate");
st.executeUpdate();
}То же самое с Hibernate:
// src/main/java/com/example/blog/Main.java
emf.runInTransaction(em -> em.persist(new Post("Привет, Hibernate")));Во втором примере нет SQL: по классу Post Hibernate знает, какую таблицу и столбцы использовать, сам выбирает id и отправляет в базу insert into Post (title,id) values (?,?). Как всё это настроить — тема следующих уроков.
Где встречается Hibernate
- Spring Boot: стартер
spring-boot-starter-data-jpaподключает Hibernate. Сущности там точно такие же, как в этом курсе, но вместоEntityManagerобычно работают через репозитории Spring Data — интерфейсы видаPostRepository extends JpaRepository<Post, Long>. - Quarkus и серверы Jakarta EE тоже используют Hibernate как реализацию JPA.
В курсе используется обычная Java SE с Maven и база H2 в памяти, чтобы ничего не скрывало работу Hibernate. Всё изученное пригодится и внутри фреймворка.
Сквозной пример
Через весь курс мы строим модель данных блога: статьи (Post), комментарии (Comment), авторы (Author) и теги (Tag). Каждый урок добавляет к ней одну идею.
Частая ошибка
В старых статьях и примерах для Hibernate 5 аннотации импортируют из javax.persistence. Начиная с Jakarta EE 9 пакет называется jakarta.persistence, и с Hibernate 7 старый импорт не компилируется:
Post.java:4: error: package javax.persistence does not exist
import javax.persistence.Entity;
^Копируя код из интернета, заменяйте javax.persistence на jakarta.persistence.