JPA
Объекты вместо ручной сборки 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 ищется, кто управляет её состоянием и когда изменения могут попасть в базу данных.