Persistence Context
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() заставляет синхронизировать накопленные изменения с базой,
но сам по себе не означает успешное завершение транзакции.
Если транзакция затем откатится, её изменения не должны считаться зафиксированными.