Hibernate 會(huì)話

2021-02-24 15:06 更新

會(huì)話

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

該 Session 對(duì)象不應(yīng)該長(zhǎng)時(shí)間保持開放狀態(tài),因?yàn)樗鼈兺ǔ2荒鼙WC線程安全,而應(yīng)該根據(jù)需求被創(chuàng)建和銷毀。Session 的主要功能是為映射實(shí)體類的實(shí)例提供創(chuàng)建,讀取和刪除操作。這些實(shí)例可能在給定時(shí)間點(diǎn)時(shí)存在于以下三種狀態(tài)之一:

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

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

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

Session 接口方法

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)