1. 程式人生 > >Hibernate緩存和狀態

Hibernate緩存和狀態

默認 -1 技術 cto href session 存在 無法 hibernate

緩存是介於應用程序和物理數據源之間,其作用是為了降低應用程序對物理數據源訪問的頻次,從而提高了應用的運行性能。 緩存的介質一般是內存,所以讀寫速度很快。但如果緩存中存放的數據量非常大時,也會用硬盤作為緩存介質。 Hibernate的緩存包括Session的緩存和SessionFactory的緩存,其中SessionFactory的緩存又可以分為兩類:內置緩存和外置緩存。Session的緩存是內置的,不能被卸載,也被稱為Hibernate的第一級緩存。SessionFactory的內置緩存和Session的緩存在實現方式上比較相似,前者是SessionFactory對象的一些集合屬性包含的數據,後者是指Session的一些集合屬性包含的數據。SessionFactory的內置緩存中存放了映射元數據和預定義SQL語句,映射元數據是映射文件中數據的拷貝,而預定義SQL語句是在Hibernate初始化階段根據映射元數據推導出來,SessionFactory的內置緩存是只讀的,應用程序不能修改緩存中的映射元數據和預定義SQL語句,因此SessionFactory不需要進行內置緩存與映射文件的同步。SessionFactory的外置緩存是一個可配置的插件。在默認情況下,SessionFactory不會啟用這個插件。外置緩存的數據是數據庫數據的拷貝,外置緩存的介質可以是內存或者硬盤。SessionFactory的外置緩存也被稱為Hibernate的第二級緩存。 區別:Hibernate的一級緩存依賴於session的生命周期,無法卸載,只會被單個session所持有,一旦session的生命周期結束,一級緩存也就消失了,因此,一級緩存不會發生並發。 Hibernate的二級緩存是一個可配置的插件,為所有session所共同訪問,因此他不適用於高並發的數據。由於二級緩存要保證數據的一致性,即數據源和緩存中數據的一致性,當頻繁修改數據時,就需要不斷訪問數據庫以保證一致性。這樣緩存變得沒有意義了. 技術分享

技術分享

技術分享

hibernate的三種狀態 1、 瞬時態:剛new 出來的一個對象,只是在內存中占據了一個空間,可被垃圾回收器回收,沒有被保存到數據庫,也沒有與session相關聯。 2、 持久態:對象被保存到數據庫中,且緩存在session對象中,是一個持久的狀態。 3、 脫離態:session關閉了,原來session的緩存脫離了session的控制,但是又有一個數據庫的記錄與之相對應。但需要重新對這條記錄改變時,脫離狀態被重新回到持久狀態、

Hibernate緩存和狀態