| 狀態 | 定義 | 識別碼 | 資料庫記錄 | Session 關聯 |
|---|---|---|---|---|
| 瞬時 | 新建未關聯 Session | 空(自動生成時) | 無 | 無 |
| 持久 | 已儲存或已載入 | 已賦值 | 有 | 當前 Session 有效 |
| 脫管 | Session 關閉後 | 保留 | 有 | 無 |
Save(obj):持久化新物件,自動生成 ID 回寫SaveOrUpdate(obj):新物件分配 ID 儲存Evict(obj):從當前 Session 移除Close():關閉 Session,所有關聯物件脫管Update(obj):更新脫管物件,**脫管期間修改會同步持久化**Lock(obj, LockMode.None):重新關聯,**未修改則不執行 UPDATE**(僅狀態轉換)Merge(obj):合併,不考慮 Session 狀態,以傳入物件覆蓋同 ID 持久物件SaveOrUpdate(obj):新物件存、脫管物件更新/重新關聯映射檔 <id>、<version> 設 unsaved-value,NHibernate 才能判斷脫管物件是否「髒」(被修改),決定是否執行 UPDATE。
Update:脫管修改 Firstname → 呼叫 Update → 執行 UPDATELock(LockMode.None):脫管**未修改** → 呼叫 Lock → **無 UPDATE**,僅轉持久Merge:Session 已有同 ID 物件 → 以傳入物件覆蓋