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