В Hibernate объект может находиться в одном из следующих состояний:
Transient (Переходное): Объект создан с помощью оператора new, но еще не связан с сессией Hibernate. Нет соответствия в базе данных.
java
Persistent (Устойчивое): Объект связан с активной сессией Hibernate. Любые изменения, внесенные в объект, будут синхронизированы с базой данных при фиксации транзакции или сбросе (flush). Имеет соответствующую строку в базе данных.
java
Изменения в Persistent объекте отслеживаются:
java
Detached (Отсоединенное): Объект ранее был Persistent, но его сессия была закрыта или объект был явно отсоединен (session.evict(object)). Он не связан с активной сессией, и изменения не будут автоматически синхронизированы с базой данных.
java
Для сохранения изменений Detached объекта его необходимо повторно присоединить к сессии:
java
Сводная таблица состояний:
| Состояние | Связь с сессией | Соответствие в БД | Отслеживание изменений | Способ получения/перехода |
|---|---|---|---|---|
| Transient | Нет | Нет | Нет | new YourClass() |
| Persistent | Да | Да | Да | session.save(), session.get(), session.load(), session.createQuery().list() |
| Detached | Нет | Да | Нет | session.close(), session.evict(), session.clear() |