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

Hibernate Session 與 SessionFactory 核心區別深度解析

     編輯:程式設計綜合問答

核心概念對比

特性SessionSessionFactory
生命週期短暫,請求級別長久,應用級別單例
線程安全非線程安全線程安全
緩存範圍一級緩存(事務級)二級緩存(跨事務)
數據性質私有,隔離數據共享,公共數據
存儲位置內存(堆)內存/磁盤(配置決定)
創建開銷輕量重量(解析映射文件)

詳細機制

Session(一級緩存)

  • 綁定於當前數據庫事務
  • 自動管理實體對象狀態(瞬時/持久/游離)
  • 事務提交或關閉時自動同步到數據庫
  • 每個業務請求應創建新 Session

SessionFactory(二級緩存)

  • 應用啟動時構建,整個應用共享
  • 緩存跨事務的實體數據、集合、查詢結果
  • 需配置緩存提供者
  • 適合存放讀多寫少的參考數據

最佳實踐

// 正確用法模式
SessionFactory sf = HibernateUtil.getSessionFactory(); // 單例

// 業務方法中
Session session = sf.openSession();
Transaction tx = null;
try {
    tx = session.beginTransaction();
    // 業務操作...
    tx.commit();
} catch (Exception e) {
    if (tx != null) tx.rollback();
    throw e;
} finally {
    session.close(); // 歸還連接,清理一級緩存
}

常見誤區

  • ❌ 將 Session 作為實例變量長期持有
  • ❌ 多線程共享同一 Session
  • ✅ SessionFactory 只需構建一次
  • ✅ 合理配置二級緩存提升性能

參考資料:Hibernate 緩存機制深度解析

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