1. 程式人生 > >理解Session快取機制 操縱持久化物件

理解Session快取機制 操縱持久化物件

Hibernate向我們提供的主要的操縱資料庫的介面,Session就是其中的一個,它提供了基本的增,刪,改,查方法.而且具有一個快取機制,能夠按照某個時間點,按照快取中的持久化物件屬性的變化來更新資料庫,著就是Session的快取清理過程.在Hibernate中物件分為三個狀態,臨時,持久化,遊離.如果我們希望JAVA裡的一個物件一直存在,就必須有一個變數一直引用著這個物件.當這個變數沒了.物件也就被JVM回收了.當然這個是最基本的常識了.當Session的save()方法持久化了一個物件的時候,即使這個物件的引用變數小時了.這個物件也依然存在,因為Sessoin裡儲存了一個這個物件的引用,當然Session快取被清空,這個物件就OVER了.在這個物件儲存在Sessoin的時候如果呼叫load()方法試圖去資料庫中載入一個物件,這個時候Session會先判斷快取中有沒有這個物件,如果有了,那麼就不需要去資料庫載入了.這樣可以減少訪問資料庫的頻率,還可以保證快取中的物件於資料庫的同步.
      Session有兩個方法,一個commit()事務提交方法,還有flush()重新整理快取方法,都有著清理快取的作用,flush()進行快取的清理,執行一系列的SQL語句,但不會提交事務.而commit()方法會先呼叫flush()方法,然後在提交事務.Session還有一個方法就是setFushMode()方法,使用者設定清理快取的時間點,主要有三種模式,預設Flush.Mode.AUTO
      1)FlushMode.AUTO Session的查詢方法,commit方法,flush方法都會清理快取.
      2)FlushMode.COMMIT Session的commit方法,flush方法會清理快取.
      3)FlushMode.NEVER Session的flush方法會清理快取.
物件的臨時狀態:剛用new建立物件的時候,它還沒有被持久化,這個時候是臨時狀態.
物件的持久化狀態:已經被加入到Session的快取中,通常所說的持久化物件就是隻一個物件在這個狀態的時候.
物件的遊離狀態:已經被持久化,但是不屬於Session的快取的時候是遊離狀態.