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 介面提供了許多方法,但我只列出一些重要的方法,我們將在本教程中使用這些方法。有關與SessionSessionFactory 關聯的完整方法列表,您可以檢視 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)

使用給定脫管例項的識別符號更新持久化例項。

廣告