鍍金池/ 教程/ Java/ 會話
例子
注釋
映射類型
ORM 概覽
環(huán)境
標準查詢
原生 SQL
持久化類
查詢語言
配置
批處理
緩存
架構(gòu)
會話
映射文件
O/R 映射
簡介
攔截器

會話

Session 用于獲取與數(shù)據(jù)庫的物理連接。 Session 對象是輕量級的,并且設(shè)計為在每次需要與數(shù)據(jù)庫進行交互時被實例化。持久態(tài)對象被保存,并通過 Session 對象檢索找回。

該 Session 對象不應該長時間保持開放狀態(tài),因為它們通常不能保證線程安全,而應該根據(jù)需求被創(chuàng)建和銷毀。Session 的主要功能是為映射實體類的實例提供創(chuàng)建,讀取和刪除操作。這些實例可能在給定時間點時存在于以下三種狀態(tài)之一:

  • 瞬時狀態(tài): 一種新的持久性實例,被 Hibernate 認為是瞬時的,它不與 Session 相關(guān)聯(lián),在數(shù)據(jù)庫中沒有與之關(guān)聯(lián)的記錄且無標識符值。
  • 持久狀態(tài):可以將一個瞬時狀態(tài)實例通過與一個 Session 關(guān)聯(lián)的方式將其轉(zhuǎn)化為持久狀態(tài)實例。持久狀態(tài)實例在數(shù)據(jù)庫中沒有與之關(guān)聯(lián)的記錄,有標識符值,并與一個 Session 關(guān)聯(lián)。
  • 脫管狀態(tài):一旦關(guān)閉 Hibernate Session,持久狀態(tài)實例將會成為脫管狀態(tài)實例。

若 Session 實例的持久態(tài)類別是序列化的,則該 Session 實例是序列化的。一個典型的事務應該使用以下語法:

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 引發(fā)異常,則事務必須被回滾,該 session 必須被丟棄。

Session 接口方法

Session 接口提供了很多方法,但在以下講解中我將僅列出幾個我們會在本教程中應用的重要方法。您可以查看 Hibernate 文件,查詢與 SessionSessionFactory 相關(guān)的完整方法目錄。

序號 Session 方法及說明
1 Transaction beginTransaction()
開始工作單位,并返回關(guān)聯(lián)事務對象。
2 void cancelQuery()
取消當前的查詢執(zhí)行。
3 void clear()
完全清除該會話。
4 Connection close()
通過釋放和清理 JDBC 連接以結(jié)束該會話。
5 Criteria createCriteria(Class persistentClass)
為給定的實體類或?qū)嶓w類的超類創(chuàng)建一個新的 Criteria 實例。
6 Criteria createCriteria(String entityName)
為給定的實體名稱創(chuàng)建一個新的 Criteria 實例。
7 Serializable getIdentifier(Object object)
返回與給定實體相關(guān)聯(lián)的會話的標識符值。
8 Query createFilter(Object collection, String queryString)
為給定的集合和過濾字符創(chuàng)建查詢的新實例。
9 Query createQuery(String queryString)
為給定的 HQL 查詢字符創(chuàng)建查詢的新實例。
10 SQLQuery createSQLQuery(String queryString)
為給定的 SQL 查詢字符串創(chuàng)建 SQLQuery 的新實例。
11 void delete(Object object)
從數(shù)據(jù)存儲中刪除持久化實例。
12 void delete(String entityName, Object object)
從數(shù)據(jù)存儲中刪除持久化實例。
13 Session get(String entityName, Serializable id)
返回給定命名的且?guī)в薪o定標識符或 null 的持久化實例(若無該種持久化實例)。
14 SessionFactory getSessionFactory()
獲取創(chuàng)建該會話的 session 工廠。
15 void refresh(Object object)
從基本數(shù)據(jù)庫中重新讀取給定實例的狀態(tài)。
16 Transaction getTransaction()
獲取與該 session 關(guān)聯(lián)的事務實例。
17 boolean isConnected()
檢查當前 session 是否連接。
18 boolean isDirty()
該 session 中是否包含必須與數(shù)據(jù)庫同步的變化?
19 boolean isOpen()
檢查該 session 是否仍處于開啟狀態(tài)。
20 Serializable save(Object object)
先分配一個生成的標識,以保持給定的瞬時狀態(tài)實例。
21 void saveOrUpdate(Object object)
保存(對象)或更新(對象)給定的實例。
22 void update(Object object)
更新帶有標識符且是給定的處于脫管狀態(tài)的實例的持久化實例。
23 void update(String entityName, Object object)
更新帶有標識符且是給定的處于脫管狀態(tài)的實例的持久化實例。
上一篇:緩存下一篇:標準查詢