
- Hibernate 教程
- Hibernate - 首頁
- ORM - 概述
- Hibernate - 概述
- Hibernate - 架構
- Hibernate - 環境
- Hibernate - 配置
- Hibernate - 會話
- Hibernate - 持久類
- Hibernate - 對映檔案
- Hibernate - 對映型別
- Hibernate - 示例
- Hibernate - 物件關係對映
- Hibernate - 級聯型別
- Hibernate - 註解
- Hibernate - 查詢語言
- Hibernate - Criteria 查詢
- Hibernate - 原生 SQL
- Hibernate - 快取
- Hibernate - 實體生命週期
- Hibernate - 批次處理
- Hibernate - 攔截器
- Hibernate - ID 生成器
- Hibernate - 儲存圖片
- Hibernate - log4j 整合
- Hibernate - Spring 整合
- Hibernate - Struts 2 整合
- Hibernate - Web 應用
- 對映表示例
- Hibernate - 基於層次結構的表
- Hibernate - 基於具體類的表
- Hibernate - 基於子類的表
- Hibernate 有用資源
- Hibernate - 問答
- Hibernate - 快速指南
- Hibernate - 有用資源
- Hibernate - 討論
Hibernate - 會話
會話用於獲取與資料庫的物理連線。會話物件是輕量級的,設計為每次需要與資料庫互動時都進行例項化。持久化物件透過會話物件進行儲存和檢索。
會話物件不應長時間保持開啟狀態,因為它們通常不是執行緒安全的,應該根據需要建立和銷燬它們。會話的主要功能是為對映實體類的例項提供、建立、讀取和刪除操作。
在給定的時間點,例項可能處於以下三種狀態之一:
瞬時 - 新的持久類例項,它不與會話關聯,在資料庫中沒有表示,也沒有識別符號值,Hibernate認為它是瞬時的。
持久化 - 透過將其與會話關聯,可以使瞬時例項持久化。持久化例項在資料庫中具有表示,具有識別符號值,並與會話關聯。
脫管 - 關閉 Hibernate 會話後,持久化例項將成為脫管例項。
如果其持久化類是可序列化的,則會話例項是可序列化的。典型的交易應使用以下習慣用法:
Session session = factory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); // do some work ... tx.commit(); } catch (Exception e) { if (tx!=null) tx.rollback(); e.printStackTrace(); } finally { session.close(); }
如果會話丟擲異常,則必須回滾事務並丟棄會話。
會話介面方法
Session 介面提供了許多方法,但我只列出一些重要的方法,我們將在本教程中使用這些方法。有關與Session 和SessionFactory 關聯的完整方法列表,您可以檢視 Hibernate 文件。
序號 | 會話方法和描述 |
---|---|
1 |
Transaction beginTransaction() 開始一個工作單元並返回關聯的 Transaction 物件。 |
2 |
void cancelQuery() 取消當前查詢的執行。 |
3 |
void clear() 完全清除會話。 |
4 |
Connection close() 透過釋放 JDBC 連線並清理來結束會話。 |
5 |
Criteria createCriteria(Class persistentClass) 為給定的實體類或實體類的超類建立一個新的 Criteria 例項。 |
6 |
Criteria createCriteria(String entityName) 為給定的實體名稱建立一個新的 Criteria 例項。 |
7 |
Serializable getIdentifier(Object object) 返回與該會話關聯的給定實體的識別符號值。 |
8 |
Query createFilter(Object collection, String queryString) 為給定的集合和篩選器字串建立一個新的 Query 例項。 |
9 |
Query createQuery(String queryString) 為給定的 HQL 查詢字串建立一個新的 Query 例項。 |
10 |
SQLQuery createSQLQuery(String queryString) 為給定的 SQL 查詢字串建立一個新的 SQLQuery 例項。 |
11 |
void delete(Object object) 從資料儲存區中刪除持久化例項。 |
12 |
void delete(String entityName, Object object) 從資料儲存區中刪除持久化例項。 |
13 |
Session get(String entityName, Serializable id) 返回具有給定識別符號的給定命名實體的持久化例項,如果沒有這樣的持久化例項,則返回 null。 |
14 |
SessionFactory getSessionFactory() 獲取建立此會話的會話工廠。 |
15 |
void refresh(Object object) 從底層資料庫重新讀取給定例項的狀態。 |
16 |
Transaction getTransaction() 獲取與此會話關聯的 Transaction 例項。 |
17 |
boolean isConnected() 檢查會話當前是否已連線。 |
18 |
boolean isDirty() 此會話是否包含必須與資料庫同步的任何更改? |
19 |
boolean isOpen() 檢查會話是否仍然開啟。 |
20 |
Serializable save(Object object) 持久化給定的瞬時例項,首先分配生成的識別符號。 |
21 |
void saveOrUpdate(Object object) 儲存(Object) 或更新(Object) 給定的例項。 |
22 |
void update(Object object) 使用給定脫管例項的識別符號更新持久化例項。 |
23 |
void update(String entityName, Object object) 使用給定脫管例項的識別符號更新持久化例項。 |