Ответ
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заполнено. - Может быть закэширован: На уровне сессии (первый уровень кэша).