Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Что такое 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.