| 接口 | 核心職責 | 關鍵特性 |
|---|---|---|
| SessionFactory | 單數據庫編譯映射緩存、Session/ConnectionProvider 工廠、二級緩存持有者 | 線程安全、重量級、應用啟動創建、通常單例 |
| Session | 單線程短生命週期會話、封裝 JDBC Connection、事務工廠、一級緩存 (持久化對象緩存) | 非線程安全、請求級/事務級、核心操作入口 (save/load/query/delete) |
| Persistent Objects | 包含持久化狀態與業務邏輯的領域對象 (POJO) | 關聯特定 Session、Session 關閉變為 Detached、可作傳輸對象 (DTO) |
| Transient/Detached Objects | 非關聯 Session 的持久化類實例 | Transient: 新 new() 無 ID;Detached: 曾持久化、Session 關閉/序列化 |
| Transaction | 原子操作邊界、抽象 JDBC/JTA/CORBA 事務 | 可選、Session 可橫跨多事務、建議使用 API 而非底層 |
| ConnectionProvider | JDBC 連接/連接池工廠、抽象 DataSource/DriverManager | 可選、不暴露給應用、可自定義實現 |
| TransactionFactory | Transaction 實例工廠 | 可選、不暴露給應用、可自定義實現 |
new() save()/persist()
Transient ----------------------> Persistent
^ \ / ^
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \ / |
| \/ |
| close()/evict() |
| /\ |
| / \ |
| / \ |
| / \ |
| / \ |
| / \ |
| / \ |
| / \ |
| / \ |
| / \ |
| / \ |
| / \ |
| / \ |
| / \ |
| / \ |
Detached <-------------------------- Persistent
(Session close/serialize) (load/get/merge)
| 狀態 | 定義 | 持久化標識 (ID) | Java 標識 (內存地址) 對應 | 數據庫記錄 |
|---|---|---|---|---|
| Transient (瞬時) | 未關聯任何 Session | 無 (null/默認值) | 無關 | 無 |
| Persistent (持久) | 關聯當前 Session | 有 (已分配) | 保證一致 (同一 Session 內同一 ID 唯一實例) | 有對應行 |
| Detached (游離) | 曾關聯 Session,現已關閉/序列化 | 有 | 不保證一致 (不同 Session 可載入同 ID 不同實例) | 通常有對應行 |
save()/persist():Transient → Persistentload()/get():DB → Persistentmerge():Detached → Persistent (合併狀態,返回新 Persistent 實例)update():Detached → Persistent (重新關聯,要求 Session 中無同 ID 實例)delete()/remove():Persistent → Transient (DB 記錄刪除,實例變 Transient)evict():Persistent → Detached (從一級緩存移除)close()/clear():Session 關閉/清空 → 所有 Persistent → Detachedrefresh():Persistent ← DB (強制同步數據庫值覆蓋內存)Hibernate 提供 org.hibernate.jmx.HibernateService MBean 實現。
HibernateContext 獲取當前 Session。jboss-service.xml (EAR/SAR 內) 部署 Hibernate Service,支援所有 SessionFactory 配置選項。可選 .har 封裝 (映射文件自動掃描),極大簡化部署描述符維護。Hibernate 可配置為 JCA Resource Adapter (Connector),部署於應用服務器連接器容器,實現連接池、事務、安全的容器化管理。屬實踐型功能,生產環境較少直接使用,通常由 Spring/EJB 容器間接管理資源。
掌握 SessionFactory/Session 雙工廠模式、三大狀態轉換規則 (特別是 Persistent 與 Detached 的身份標識語義差異)、JMX 自動化 Session 管理,是駕馭 Hibernate 核心機制、排查異常 (LazyInitializationException, NonUniqueObjectException, StaleObjectStateException) 的理論基石。