
org.hibernate
Interface Session
- All Superinterfaces:
- Serializable
- All Known Subinterfaces:
- EventSource, Session
- All Known Implementing Classes:
- SessionImpl
- public interface Session
- extends Serializable
Java應(yīng)用程序與Hibernate之間的主要運(yùn)行時(shí)接口。它是抽象了持久化服務(wù)概念的核心抽象API類。
Session的生命周期綁定在一個(gè)物理的事務(wù)(tansaction)上面。(長(zhǎng)的事務(wù)可能跨越多個(gè)數(shù)據(jù)庫(kù)事物。)
Session的主要功能是提供對(duì)映射的實(shí)體類實(shí)例的創(chuàng)建,讀取和刪除操作。實(shí)例可能以下面三種狀態(tài)存在:
自由狀態(tài)(transient): 不曾進(jìn)行持久化,未與任何Session相關(guān)聯(lián)
持久化狀態(tài)(persistent): 僅與一個(gè)Session相關(guān)聯(lián)
游離狀態(tài)(detached): 已經(jīng)進(jìn)行過持久化,但當(dāng)前未與任何Session相關(guān)聯(lián)
游離狀態(tài)的實(shí)例可以通過調(diào)用save()、persist()或者saveOrUpdate()方法進(jìn)行持久化。持久化實(shí)例可以通過調(diào)用 delete()變成游離狀態(tài)。通過get()或load()方法得到的實(shí)例都是持久化狀態(tài)的。游離狀態(tài)的實(shí)例可以通過調(diào)用 update()、0saveOrUpdate()、lock()或者replicate()進(jìn)行持久化。游離或者自由狀態(tài)下的實(shí)例可以通過調(diào)用merge()方法成為一個(gè)新的持久化實(shí)例。
save()和persist()將會(huì)引發(fā)SQL的INSERT,delete()會(huì)引發(fā)SQLDELETE,而update()或merge()會(huì)引發(fā)SQLUPDATE。對(duì)持久化(persistent)實(shí)例的修改在刷新提交的時(shí)候會(huì)被檢測(cè)到,它也會(huì)引起SQLUPDATE。saveOrUpdate()或者replicate()會(huì)引發(fā)SQLINSERT或者UPDATE。
其具體實(shí)現(xiàn)并不一定是線程安全的。每個(gè)線程/事務(wù)應(yīng)該從一個(gè)SessionFactory獲取自己的session實(shí)例。
如果其持久化對(duì)象類是可序列化的,則Session實(shí)例也是可序列化的。
一個(gè)典型的事務(wù)應(yīng)該使用下面的形式:
Session sess = factory.openSession(); Transaction tx; try { tx = sess.beginTransaction(); //do some work ... tx.commit(); } catch (Exception e) { if (tx!=null) tx.rollback(); throw e; } finally { sess.close(); }
如果Session拋出了異常, 事務(wù)必須回滾而session會(huì)被廢棄。在異常發(fā)生后Session的內(nèi)部狀態(tài)可能會(huì)與數(shù)據(jù)庫(kù)失去同步。
- Author:
- Gavin King
- See Also:
SessionFactory
Method Summary | |
Transaction |
beginTransaction() 開始一個(gè)工作單元并且返回相關(guān)聯(lián)的事務(wù)(Transaction)對(duì)象。 |
void |
cancelQuery() 終止執(zhí)行當(dāng)前查詢。 |
void |
clear() 完整的清除這個(gè)session。 |
Connection |
close() 停止這個(gè)Session,通過中斷JDBC連接并且清空(cleaning up)它。 |
Connection |
connection() 獲取這個(gè)Session的JDBC連接。 如果這個(gè)session使用了積極的collection釋放策略(如CMT-容器控制事務(wù)的環(huán)境下),關(guān)閉這個(gè)調(diào)用的連接的職責(zé)應(yīng)該由當(dāng)前應(yīng)用程序負(fù)責(zé)。 |
boolean |
contains(Object object) 檢查這個(gè)對(duì)象實(shí)例是否與當(dāng)前的Session關(guān)聯(lián)(即是否為Persistent狀態(tài))。 |
Criteria |
createCriteria(Class persistentClass) 為給定的實(shí)體類或它的超類創(chuàng)建一個(gè)新的Criteria實(shí)例。 |
Criteria |
createCriteria(Class persistentClass, String alias) 根據(jù)給定的實(shí)體類或者它的超類創(chuàng)建一個(gè)新的Criteria實(shí)例,并賦予它(實(shí)體類)一個(gè)別名。 |
Criteria |
createCriteria(String entityName) 根據(jù)給定的實(shí)體的名稱(name),創(chuàng)建一個(gè)新的Criteria實(shí)例。 |
Criteria |
createCriteria(String entityName, String alias) 根據(jù)給定的實(shí)體的名稱(name),創(chuàng)建一個(gè)新的Criteria實(shí)例,并賦予它(實(shí)體類)一個(gè)別名 |
Query |
createFilter(Object collection, String queryString) 根據(jù)給定的collection和過濾字符串(查詢條件)創(chuàng)建一個(gè)新的Query實(shí)例。 |
Query |
createQuery(String queryString) 根據(jù)給定的HQL查詢條件創(chuàng)建一個(gè)新的Query實(shí)例。 |
SQLQuery |
createSQLQuery(String queryString) 根據(jù)給定的SQL查詢條件創(chuàng)建一個(gè)新的SQLQuery實(shí)例。 |
void |
delete(Object object) 從數(shù)據(jù)庫(kù)中移除持久化(persistent)對(duì)象的實(shí)例。 |
void |
delete(String entityName, Object object) 從數(shù)據(jù)庫(kù)中移除持久化(persistent)對(duì)象的實(shí)例。 |
void |
disableFilter(String filterName) 禁用當(dāng)前session的名稱過濾器。 |
Connection |
disconnect() 斷開Session與當(dāng)前的JDBC連接。 |
Filter |
enableFilter(String filterName) 打開當(dāng)前session的名稱過濾器。 |
void |
evict(Object object) 將當(dāng)前對(duì)象實(shí)例從session緩存中清除。 |
void |
flush() 強(qiáng)制提交清理(flush)Session。 |
Object |
get(Class clazz, Serializable id) 根據(jù)給定標(biāo)識(shí)和實(shí)體類返回持久化對(duì)象的實(shí)例,如果沒有符合條件的持久化對(duì)象實(shí)例則返回null。 |
Object |
get(Class clazz, Serializable id, LockMode lockMode) 根據(jù)給定標(biāo)識(shí)和實(shí)體類返回持久化對(duì)象的實(shí)例,如果沒有符合條件的持久化對(duì)象實(shí)例則返回null。 |
Object |
get(String entityName, Serializable id) 返回與給定的實(shí)體命名和標(biāo)識(shí)匹配的持久化實(shí)例,如果沒有對(duì)應(yīng)的持久化實(shí)例則返回null。 |
Object |
get(String entityName, Serializable id, LockMode lockMode) 返回與給定的實(shí)體類和標(biāo)識(shí)所匹配的持久化實(shí)例,如果沒有對(duì)應(yīng)的持久化實(shí)例則返回null。 |
CacheMode |
getCacheMode() 得到當(dāng)前的緩存模式。 |
LockMode |
getCurrentLockMode(Object object) 檢測(cè)給定對(duì)象當(dāng)前的鎖定級(jí)別。 |
Filter |
getEnabledFilter(String filterName) 根據(jù)名稱獲取一個(gè)當(dāng)前允許的過濾器(filter)。 |
EntityMode |
getEntityMode() 獲取這個(gè)session有效的實(shí)體模式。 |
String |
getEntityName(Object object) 返回一個(gè)持久化對(duì)象的實(shí)體名稱。 |
FlushMode |
getFlushMode() 獲得當(dāng)前的刷新提交(flush)模式。 |
Serializable |
getIdentifier(Object object) 獲取給定的實(shí)體對(duì)象實(shí)例在Session的緩存中的標(biāo)識(shí),如果該實(shí)例是自由狀態(tài)(Transient)的或者與其它Session關(guān)聯(lián)則拋出一個(gè)異常。 |
Query |
getNamedQuery(String queryName) 從映射文件中根據(jù)給定的查詢的名稱字符串獲取一個(gè)Query(查詢)實(shí)例。 |
Session |
getSession(EntityMode entityMode) 根據(jù)給定的實(shí)體模式(Entity Mode)開始一個(gè)新的有效的Session。 |
SessionFactory |
getSessionFactory() 獲取創(chuàng)建這個(gè)session的SessionFactory實(shí)例。 |
SessionStatistics |
getStatistics() 獲取這個(gè)session的統(tǒng)計(jì)信息。 |
Transaction |
getTransaction() 獲取與這個(gè)session關(guān)聯(lián)的Transaction(事務(wù))實(shí)例。 instance associated with this session. |
boolean |
isConnected() 檢查當(dāng)前Session是否處于連接狀態(tài)。 |
boolean |
isDirty() 當(dāng)前Session是否包含需要與數(shù)據(jù)庫(kù)同步的(數(shù)據(jù)狀態(tài))變化 ?如果我們刷新提交(flush)這個(gè)session是否會(huì)有SQL執(zhí)行? |
boolean |
isOpen() 檢查當(dāng)前Session是否仍然打開。 |
Object |
load(Class theClass, Serializable id) 在符合條件的實(shí)例存在的情況下,根據(jù)給定的實(shí)體類和標(biāo)識(shí)返回持久化狀態(tài)的實(shí)例。 |
Object |
load(Class theClass, Serializable id, LockMode lockMode) 在符合條件的實(shí)例存在的情況下,根據(jù)給定的實(shí)體類、標(biāo)識(shí)及指定的鎖定等級(jí)返回持久化狀態(tài)的實(shí)例。 |
void |
load(Object object, Serializable id) 將與給定的標(biāo)示對(duì)應(yīng)的持久化狀態(tài)(值)復(fù)制到給定的自由狀態(tài)(trasient)實(shí)例上。 |
Object |
load(String entityName, Serializable id) 在符合條件的實(shí)例存在的情況下,根據(jù)給定的實(shí)體類和標(biāo)識(shí)返回持久化狀態(tài)的實(shí)例。 |
Object |
load(String entityName, Serializable id, LockMode lockMode) 在符合條件的實(shí)例存在的情況下,根據(jù)給定的實(shí)體類、標(biāo)識(shí)及指定的鎖定等級(jí)返回持久化狀態(tài)的實(shí)例。 |
void |
lock(Object object, LockMode lockMode) 從給定的對(duì)象上獲取指定的鎖定級(jí)別。 |
void |
lock(String entityName, Object object, LockMode lockMode) 從給定的對(duì)象上獲取指定的鎖定級(jí)別。 |
Object |
merge(Object object) 將給定的對(duì)象的狀態(tài)復(fù)制到具有相同標(biāo)識(shí)的持久化對(duì)象上。 |
Object |
merge(String entityName, Object object) 將給定的對(duì)象的狀態(tài)復(fù)制到具有相同標(biāo)識(shí)的持久化對(duì)象上。 |
void |
persist(Object object) 將一個(gè)自由狀態(tài)(transient)的實(shí)例持久化。 |
void |
persist(String entityName, Object object) 將一個(gè)自由狀態(tài)(transient)的實(shí)例持久化。 |
void |
reconnect() 不推薦的。 手工的重新連接只應(yīng)用于應(yīng)用程序提供連接的情況,在這種情況下或許應(yīng)該使用 reconnect(java.sql.Connection) 。 |
void |
reconnect(Connection connection) 重新連接到給定的JDBC連接。 |
void |
refresh(Object object) 從數(shù)據(jù)庫(kù)中重新讀取給定實(shí)例的狀態(tài)。 |
void |
refresh(Object object, LockMode lockMode) 根據(jù)指定的鎖定模式(LockMode),從數(shù)據(jù)庫(kù)中重新讀取給定實(shí)例的狀態(tài)。 |
void |
replicate(Object object, ReplicationMode replicationMode) 使用當(dāng)前的標(biāo)識(shí)值持久化給定的游離狀態(tài)(Transient)的實(shí)體。 |
void |
replicate(String entityName, Object object, ReplicationMode replicationMode) 使用當(dāng)前的標(biāo)識(shí)值持久化給定的游離狀態(tài)(Transient)的實(shí)體。 |
Serializable |
save(Object object) 首先為給定的自由狀態(tài)(Transient)的對(duì)象(根據(jù)配置)生成一個(gè)標(biāo)識(shí)并賦值,然后將其持久化。 |
Serializable |
save(String entityName, Object object) 首先為給定的自由狀態(tài)(Transient)的對(duì)象(根據(jù)配置)生成一個(gè)標(biāo)識(shí)并賦值,然后將其持久化。 |
void |
saveOrUpdate(Object object) 根據(jù)給定的實(shí)例的標(biāo)識(shí)屬性的值(注:可以指定unsaved-value。一般默認(rèn)null。)來決定執(zhí)行 save() 或update()操作。 |
void |
saveOrUpdate(String entityName, Object object) 根據(jù)給定的實(shí)例的標(biāo)識(shí)屬性的值(注:可以指定unsaved-value。一般默認(rèn)null。)來決定執(zhí)行 save() 或update()操作。 |
void |
setCacheMode(CacheMode cacheMode) 設(shè)置刷新提交模式。 |
void |
setFlushMode(FlushMode flushMode) 設(shè)置刷新提交模式。 |
void |
setReadOnly(Object entity, boolean readOnly) 將一個(gè)未經(jīng)更改的持久化對(duì)象設(shè)置為只讀模式,或者將一個(gè)只讀對(duì)象標(biāo)記為可以修改的模式。 |
void |
update(Object object) 根據(jù)給定的detached(游離狀態(tài))對(duì)象實(shí)例的標(biāo)識(shí)更新對(duì)應(yīng)的持久化實(shí)例。 |
void |
update(String entityName, Object object) 根據(jù)給定的detached(游離狀態(tài))對(duì)象實(shí)例的標(biāo)識(shí)更新對(duì)應(yīng)的持久化實(shí)例。 |