Persistence Context

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

Persistence Context хранит управляемую картину объектов

Persistence context — это область, в которой JPA отслеживает Entity. Если объект managed, context знает его persistent identity и текущее состояние. Именно поэтому повторный поиск той же Entity в одном context может вернуть уже известный ему объект.

User first = entityManager.find(User.class, 42L);
User second = entityManager.find(User.class, 42L);

System.out.println(first == second);

В пределах одного persistence context одна persistent identity представлена одним managed-экземпляром. Это даёт JPA стабильную объектную картину и позволяет отслеживать изменения.

Dirty checking превращает изменения объекта в обновление

User user = entityManager.find(User.class, 42L);
user.setName("Mira");

Для managed-объекта обычно не нужен отдельный вызов update(). Provider видит изменённое состояние и при синхронизации context с базой формирует нужное обновление. Такое отслеживание изменений обычно называют dirty checking.

flush — синхронизация, а не завершение транзакции

user.setName("Mira");
entityManager.flush();

flush() заставляет синхронизировать накопленные изменения с базой, но сам по себе не означает успешное завершение транзакции. Если транзакция затем откатится, её изменения не должны считаться зафиксированными.

Persistence context — не общий кэш приложения. Его главная роль — управление Entity и их состоянием в определённых границах работы, а не бессрочное хранение данных.