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的緩存的時候是游離狀態.