首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Hibernate 核心概念筆記 (上):核心接口、實例狀態、JMX/JCA 整合

     編輯:J2EE

一、七大核心接口圖譜

接口核心職責關鍵特性
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 而非底層
ConnectionProviderJDBC 連接/連接池工廠、抽象 DataSource/DriverManager可選、不暴露給應用、可自定義實現
TransactionFactoryTransaction 實例工廠可選、不暴露給應用、可自定義實現

二、實例三大狀態與轉換

        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 → Persistent
  • load()/get():DB → Persistent
  • merge():Detached → Persistent (合併狀態,返回新 Persistent 實例)
  • update():Detached → Persistent (重新關聯,要求 Session 中無同 ID 實例)
  • delete()/remove():Persistent → Transient (DB 記錄刪除,實例變 Transient)
  • evict():Persistent → Detached (從一級緩存移除)
  • close()/clear():Session 關閉/清空 → 所有 Persistent → Detached
  • refresh():Persistent ← DB (強制同步數據庫值覆蓋內存)

三、JMX 整合 (JBoss 為例)

Hibernate 提供 org.hibernate.jmx.HibernateService MBean 實現。

JBoss 上自動獲得的三大紅利

  1. Session 管理自動化: Session 生命週期綁定 JTA 事務邊界,無需手動 open/close,由 EJB 攔截器完成。代碼中通過 HibernateContext 獲取當前 Session。
  2. HAR 部署簡化: 使用 jboss-service.xml (EAR/SAR 內) 部署 Hibernate Service,支援所有 SessionFactory 配置選項。可選 .har 封裝 (映射文件自動掃描),極大簡化部署描述符維護。
  3. 統一管理監控: JMX Console 可視化監控 SessionFactory 統計、緩存命中率、連接池狀態、執行 SQL 等。

四、JCA 支持 (實驗性)

Hibernate 可配置為 JCA Resource Adapter (Connector),部署於應用服務器連接器容器,實現連接池、事務、安全的容器化管理。屬實踐型功能,生產環境較少直接使用,通常由 Spring/EJB 容器間接管理資源。

總結

掌握 SessionFactory/Session 雙工廠模式、三大狀態轉換規則 (特別是 Persistent 與 Detached 的身份標識語義差異)、JMX 自動化 Session 管理,是駕馭 Hibernate 核心機制、排查異常 (LazyInitializationException, NonUniqueObjectException, StaleObjectStateException) 的理論基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved