- Session是什麼?
- Session 接口是 Hibernate 嚮應用程序提供的操縱數據庫的最主要的接口, 它提供了基本的保存, 更新, 刪除和加載 Java 對象的方法.
- Session 具有一個緩存, 位於緩存中的對象稱爲持久化對象, 它和數據庫中的相關記錄對應. Session 能夠在某些時間點, 按照緩存中對象的變化來執行相關的 SQL 語句, 來同步更新數據庫, 這一過程被稱爲刷新緩存(flush)
- 站在持久化的角度, Hibernate 把對象分爲 4 種狀態: 持久化狀態, 臨時狀態, 遊離狀態, 刪除狀態. Session 的特定方法能使對象從一個狀態轉換到另一個狀態.
- Session緩存
- Session接口對於Hibernate 開發人員來說是一個最重要的接口。然而在Hibernate中,實例化的Session是一個輕量級的類,創建和銷燬它都不會佔用很多資源。這在實際項目中確實很重要,因爲在客戶程序中,可能會不斷地創建以及銷燬Session對象,如果Session的開銷太大,會給系統帶來不良影響。但值得注意的是Session對象是非線程安全的,因此在你的設計中,最好是一個線程只創建一個Session對象。
- 在Hibernate的設計者的頭腦中,他們將session看作介於數據連接與事務管理一種中間接口。我們可以將session想象成一個持久對象的緩衝區,Hibernate能檢測到這些持久對象的改變,並及時刷新數據庫。我們有時也稱Session是一個持久層管理器,因爲它包含這一些持久層相關的操作,諸如存儲持久對象至數據庫,以及從數據庫從獲得它們。請注意,Hibernate 的session不同於JSP應用中的HttpSession。當我們使用session這個術語時,我們指的是Hibernate中的session,而我們以後會將HttpSesion對象稱爲用戶session。
- Session 緩存可減少 Hibernate 應用程序訪問數據庫的頻率。
- 操作Session緩存的三個方法:flush() , refesh() , clear()
- flush 緩存
- flush:
- Session 按照緩存中對象的屬性變化來同步更新數據庫
- 默認情況下 Session 在以下時間點刷新緩存:
- 顯式調用 Session 的 flush() 方法
- 當應用程序調用 Transaction 的 commit()方法的時, 該方法先 flush ,然後在向數據庫提交事務
- 當應用程序執行一些查詢(HQL, Criteria)操作時,如果緩存中持久化對象的屬性已經發生了變化,會先 flush 緩存,以保證查詢結果能夠反映持久化對象的最新狀態
- flush 緩存的例外情況:
- 如果對象使用 native 生成器生成 OID, 那麼當調用 Session 的 save() 方法保存對象時, 會立即執行向數據庫插入該實體的 insert 語句
- commit() 和 flush() 方法的區別:
- flush 執行一系列 sql 語句,但不提交事務;commit 方法先調用flush() 方法,然後提交事務. 意味着提交事務意味着對數據庫操作永久保存下來。
- flush:
- refesh
- refresh():會強制發送select語句,以使session緩存中對象的狀態和數據表中對應的記錄保持一致。
- 該方法的有效性需要配置事務的隔離級別爲read commited(讀已提交),在hibernate.cfg.xml文件中配置<property name="connection.isolation">2</property>
- clear
- clear():清理緩存。
- flush 緩存
深入學習Hibernate4_04通過 Session 操縱對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.