| 特性 | 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(); // 歸還連接,清理一級緩存
}
參考資料:Hibernate 緩存機制深度解析