В Hibernate сущность может находиться в одном из следующих состояний:
Transient (Переходное): Объект создан, но не связан с сессией Hibernate. У него нет представления в базе данных. Операции над ним выполняются в памяти, но не влияют на базу данных.
java
Persistent (Постоянное): Объект ассоциирован с текущей сессией Hibernate и управляется ею. Любые изменения объекта будут синхронизированы с базой данных при коммите транзакции или сбросе (flush) сессии. Объект, считанный из базы данных с помощью сессии, находится в этом состоянии.
java
Detached (Отсоединенное): Объект ранее был ассоциирован с сессией, но сессия была закрыта или объект был явно отсоединен (например, с помощью session.evict(object)). Объект все еще содержит данные из базы данных, но изменения, внесенные в него, не будут автоматически синхронизированы с базой данных. Чтобы сохранить изменения, объект нужно снова присоединить к другой сессии.
java
Переходы между состояниями:
| Из состояния\В состояние | Transient | Persistent | Detached |
|---|---|---|---|
| Transient | (остается) | save(), persist(), saveOrUpdate() | (невозможно напрямую) |
| Persistent | (невозможно) | (остается) | close(), evict(), clear() |
| Detached | (невозможно) | update(), merge(), saveOrUpdate() | (остается) |