Session 用于獲取與數(shù)據(jù)庫的物理連接。 Session 對象是輕量級的,并且設(shè)計為在每次需要與數(shù)據(jù)庫進行交互時被實例化。持久態(tài)對象被保存,并通過 Session 對象檢索找回。
該 Session 對象不應(yīng)該長時間保持開放狀態(tài),因為它們通常不能保證線程安全,而應(yīng)該根據(jù)需求被創(chuàng)建和銷毀。Session 的主要功能是為映射實體類的實例提供創(chuàng)建,讀取和刪除操作。這些實例可能在給定時間點時存在于以下三種狀態(tài)之一:
若 Session 實例的持久態(tài)類別是序列化的,則該 Session 實例是序列化的。一個典型的事務(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 接口提供了很多方法,但在以下講解中我將僅列出幾個我們會在本教程中應(yīng)用的重要方法。您可以查看 Hibernate 文件,查詢與 Session 及 SessionFactory 相關(guān)的完整方法目錄。
序號 | Session 方法及說明 |
---|---|
1 | Transaction beginTransaction()
開始工作單位,并返回關(guān)聯(lián)事務(wù)對象。 |
2 | void cancelQuery()
取消當(dāng)前的查詢執(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)的會話的標(biāo)識符值。 |
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定標(biā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)的事務(wù)實例。 |
17 | boolean isConnected()
檢查當(dāng)前 session 是否連接。 |
18 | boolean isDirty()
該 session 中是否包含必須與數(shù)據(jù)庫同步的變化? |
19 | boolean isOpen()
檢查該 session 是否仍處于開啟狀態(tài)。 |
20 | Serializable save(Object object)
先分配一個生成的標(biāo)識,以保持給定的瞬時狀態(tài)實例。 |
21 | void saveOrUpdate(Object object)
保存(對象)或更新(對象)給定的實例。 |
22 | void update(Object object)
更新帶有標(biāo)識符且是給定的處于脫管狀態(tài)的實例的持久化實例。 |
23 | void update(String entityName, Object object)
更新帶有標(biāo)識符且是給定的處于脫管狀態(tài)的實例的持久化實例。 |
更多建議: