Hibernate中session快取
阿新 • • 發佈:2019-02-20
Session快取的實現原理
Session快取是由它的實現類SessionImpl中定義的一些集合屬性構成的,原理是保證有一個引用在關聯著某個持久化物件,保持它的生命週期不會結束。Session級別的快取又叫一級快取。
Session快取的作用
(1)減少DB訪問頻率。
應用程式從記憶體中讀取持久化物件的速度顯然比到資料庫中查詢資料要快得多了,所以Session的快取可以提高資料訪問效能。
(2)保證快取中物件與DB資料同步。
位於快取中的物件被稱為持久化物件,當持久化物件的狀態發生了變換,Session並不會立即執行相關SQL語句,這使得Session能夠把幾條相關的SQL居於合併為一條SQL語句,以便較少DB訪問次數,提高效率。
Session清理快取的時間點
(1)Transaction物件的commit( )方法
(2)Session物件的flush( )方法
持久化物件生命週期的狀態
(1)臨時狀態(Transient):通過使用new關鍵字建立,還沒有被持久化,不在Session的快取中的物件處於臨時狀態。
(2)持久化狀態(Persistent):通過Session物件的save( )方法或者saveOrUpdate()的方法儲存了,處於臨時狀態的物件,這個物件處在快取當中,這個物件此時處於持久化狀態。
(3)遊離狀態(Detached):脫離了Session物件的管理,但是其識別符號屬性與資料庫表的主鍵值一致的物件處於遊離狀態。
(4)移除狀態(Removed):使用Session物件的delete( )方法刪除資料,此時,由於物件失去了資料庫中所有對應的資料,這個物件就處於了移除狀態。