JPA

Базовый Java
≈ 2 мин чтения

Объекты вместо ручной сборки SQL-результатов

В JDBC приложение напрямую работает с SQL, параметрами запроса и строками результата. JPA поднимает уровень абстракции: обычные Java-объекты можно связать с таблицами базы данных, а сохранение, поиск и изменение этих объектов поручить persistence provider — например Hibernate.

JPA — это спецификация API и правил объектно-реляционного отображения, а не конкретная библиотека или база данных. В современном коде её типы находятся в пакете jakarta.persistence.

Что будет внутри раздела

  • Основы JPA. Соберём общую картину: provider, EntityManager и работа с объектами вместо ручной обработки строк результата.
  • Entity. Разберём, какой класс может представлять запись базы данных и как задаются его идентификатор и поля.
  • Жизненный цикл Entity. Посмотрим, почему один и тот же объект может быть новым, managed, detached или removed.
  • Связи между Entity. Свяжем объекты отношениями one-to-one, one-to-many, many-to-one и many-to-many.
  • FetchType и загрузка данных. Разберём, когда связанные данные загружаются сразу, а когда — по необходимости.
  • Каскадные операции. Научимся управлять тем, распространяются ли операции над одной Entity на связанные объекты.
  • Persistence Context. Поймём, почему JPA отслеживает managed-объекты и как это связано с автоматическим обновлением данных.
  • JPQL. Научимся писать запросы в терминах Entity и их полей.
  • Транзакции JPA. Свяжем изменение Entity с границами транзакции.
  • N+1 проблема. Увидим типичную проблему лишних запросов и научимся замечать её в коде.

Эти темы складываются в одну модель: сначала объект становится Entity, затем JPA управляет его состоянием, связями и загрузкой внутри persistence context. После этого запросы и транзакции уже читаются не как набор отдельных API-вызовов, а как части одного механизма работы с данными.

User user = entityManager.find(User.class, 42L);
System.out.println(user.getName());

После раздела за таким коротким кодом будет видна вся цепочка: какая Entity ищется, кто управляет её состоянием и когда изменения могут попасть в базу данных.