Hibernate 中的實體物件存在三種狀態:瞬時態、持久態、托管態。理解它們的特徵、來源、去向及轉換規則,是掌握 Hibernate 生命週期管理的關鍵。

| 狀態 | 特徵 | 來源 | 去向 |
|---|---|---|---|
| 瞬時態 (Transient) |
僅存在於記憶體,與資料庫無任何關聯,無 ID 或 ID 未持久化 | 1. new Entity()2. 持久態 session.delete()3. 托管態 session.delete() |
1. session.save()/saveOrUpdate() → 持久態2. 長期無引用 → GC 回收 |
| 持久態 (Persistent) |
存在於記憶體與資料庫,兩者數據完全同步,受 Session 管理 | 1. session.get()/load() 查詢2. 瞬時態 save()3. 托管態 update() |
1. session.delete() → 瞬時態2. Session 關閉/清理 → 托管態 |
| 托管態 (Detached) |
存在於記憶體與資料庫,但僅 ID 相同,其他屬性可能不同步,脫離 Session 管理 | 1. 持久態 Session 關閉/清理 (close(), clear(), evict()) |
1. session.update()/saveOrUpdate() → 持久態2. session.delete() → 瞬時態3. 長期無引用 → GC 回收 |
update()。update() 會將記憶體狀態強制同步至資料庫,物件重回持久態。
掌握三大狀態的轉換規則,能幫助開發者正確設計 Session 與事務邊界,避免常見的 LazyInitializationException、重複主鍵異常、資料不同步等問題,是 Hibernate 進階開發的必修課。