Какие состояния может иметь объект в Hibernate?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
В Hibernate объект может находиться в одном из следующих состояний:
-
Transient (Переходное): Объект создан с помощью оператора
new, но еще не связан с сессией Hibernate. Нет соответствия в базе данных.// Transient state User user = new User(); user.setName("John Doe"); -
Persistent (Устойчивое): Объект связан с активной сессией Hibernate. Любые изменения, внесенные в объект, будут синхронизированы с базой данных при фиксации транзакции или сбросе (flush). Имеет соответствующую строку в базе данных.
// Transition from Transient to Persistent session.save(user);Изменения в Persistent объекте отслеживаются:
// Modification of a Persistent object user.setEmail("john.doe@example.com"); // Changes will be persisted -
Detached (Отсоединенное): Объект ранее был Persistent, но его сессия была закрыта или объект был явно отсоединен (
session.evict(object)). Он не связан с активной сессией, и изменения не будут автоматически синхронизированы с базой данных.// Transition from Persistent to Detached session.close(); // Or session.evict(user);Для сохранения изменений Detached объекта его необходимо повторно присоединить к сессии:
// Reattaching a Detached object session.update(user); // Or session.merge(user);
Сводная таблица состояний:
| Состояние | Связь с сессией | Соответствие в БД | Отслеживание изменений | Способ получения/перехода |
|---|---|---|---|---|
| Transient | Нет | Нет | Нет | new YourClass() |
| Persistent | Да | Да | Да | session.save(), session.get(), session.load(), session.createQuery().list() |
| Detached | Нет | Да | Нет | session.close(), session.evict(), session.clear() |