Session 的緩存
Hibernate中緩存分為兩種:一級緩存(Session級別)和二級緩存
(SessionFactory級別)。
Session 的作用:
1)充當蓄水池的作用,減少程序訪問數據庫的次數.很多對象數據不是經常改變的,第一次訪問這些對象時,Hibernate會將它們放
入緩存中,以后只要這個對象沒有改動過,訪問這個對象時Hibernate就不會去數據庫里加載它的數據,而是從內存中直接返回應用程序,這樣子效率就比較高了.
2)保證緩存中的數據與數據庫同步.緩存畢竟不是數據庫,它的數據可能和數據庫不一致,這時Hibernate會負責將緩存中的數據同步到數據庫.當然這要參照FlushMode的具體設置.
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 Hibernate 判斷對象的屬性是更改,如果被更改過成了臟數據,則會在下一個查詢語句前將更新此改動以保證同步數據庫.
2)FlushMode.COMMIT 在事務結束之前清理Session的緩存,其它任何時候都不清理緩存
3)FlushMode.NEVER 除非強制調用Session的flush()方法,否則永不清理緩存
4)FlushMode.ALWAYS 在每一個查詢語句前都調用flush()方法進行緩存清理.
對象的臨時狀態:剛用new創建對象的時候,它還沒有被持久化,這個時候是臨時狀態.
對象的持久化狀態:已經被加入到Session的緩存中,通常所說的持久化對象就是只一個對象在這個狀態的時候.
對象的游離狀態:已經被持久化,但是不屬于Session的緩存的時候是游離狀態.
posted on 2007-10-29 09:21
Ke 閱讀(643)
評論(0) 編輯 收藏 所屬分類:
hibernate