Что означает persistent состояние объекта в Hibernate?

«Что означает persistent состояние объекта в Hibernate?» — вопрос из категории Hibernate, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Persistent (управляемый) состояние — это состояние объекта, при котором он связан с активной сессией Hibernate (Session) и имеет соответствующую запись в базе данных. Изменения в таком объекте автоматически отслеживаются и синхронизируются с БД.

Как объект становится persistent:

  • Загрузка из БД (session.get(), session.load()).
  • Сохранение нового объекта (session.save(), session.persist()).
  • Присоединение отвязанного объекта (session.update(), session.merge()).

Пример жизненного цикла:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

User user = new User("John"); // TRANSIENT (не связан с сессией/БД)

session.save(user); // Теперь объект в PERSISTENT состоянии
// У объекта есть ID, и он привязан к текущей сессии.

user.setEmail("john@example.com"); // Изменение отслеживается Hibernate
// Нет необходимости вызывать update() вручную!

tx.commit(); // Здесь Hibernate выполнит SQL INSERT (или UPDATE)
session.close(); // После закрытия сессии объект становится DETACHED

Характеристики persistent-объекта:

  • Связан с сессией: Управляется контекстом persistence.
  • Отслеживание изменений: Dirty checking автоматически определяет модификации.
  • Синхронизация с БД: Изменения сохраняются при коммите транзакции.
  • Наличие идентификатора: Свойство @Id заполнено.
  • Может быть закэширован: На уровне сессии (первый уровень кэша).