隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827537
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜

          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 閱讀(645) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 五原县| 祁东县| 重庆市| 台山市| 辽阳市| 进贤县| 巴林右旗| 乡宁县| 陆良县| 德化县| 航空| 凤山县| 隆尧县| 仙居县| 那曲县| 吉林省| 奉新县| 璧山县| 平罗县| 达尔| 固镇县| 林西县| 义乌市| 扎鲁特旗| 峨山| 蒲江县| 南丰县| 敦煌市| 白朗县| 南阳市| 多伦县| 汝城县| 喀喇沁旗| 通海县| 长泰县| 田林县| 固安县| 南靖县| 娄底市| 中方县| 武胜县|