隨筆-75  評論-193  文章-5  trackbacks-0

          這篇Blog是原來寫在別的地方的,今天將其轉到BlogJava上來。
          -------------------------------------------------------------------------------

          今天仔仔細細的看了一下Hibernate的緩存,并做了實例實踐了一把。google一下,網上的教程、文章很多。
          自己小結一下:

          Hibernate的緩存分為:

          • 一級緩存:在Session級別的,在Session關閉的時候,一級緩存就失效了。
          • 二級緩存:在SessionFactory級別的,它可以使用不同的緩存實現,如EhCache、JBossCache、OsCache等。

          緩存的注釋寫法如下,加在Entity的java類上:

          • @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)

          緩存的方式有四種,分別為:

          • CacheConcurrencyStrategy.NONE
          • CacheConcurrencyStrategy.READ_ONLY,只讀模式,在此模式下,如果對數據進行更新操作,會有異常;
          • CacheConcurrencyStrategy.READ_WRITE,讀寫模式在更新緩存的時候會把緩存里面的數據換成一個鎖,其它事務如果去取相應的緩存數據,發現被鎖了,直接就去數據庫查詢;
          • CacheConcurrencyStrategy.NONSTRICT_READ_WRITE,不嚴格的讀寫模式則不會的緩存數據加鎖;
          • CacheConcurrencyStrategy.TRANSACTIONAL,事務模式指緩存支持事務,當事務回滾時,緩存也能回滾,只支持JTA環境。

          另外還有如下注意事項:

          1、查詢緩存需要在Query的相應方法執行前加上這么一句:

          query.setCacheable(true);

          在使用Hibernate時,獲得的query有setCacheable方法,可以設置使用緩存,但當使用JPA時,javax.persistence.Query并沒有setCacheable方法,此時如果JPA的實現是Hibernate時,可以將其進行如下轉化,再調用setCacheable方法(如果JPA的實現是其它ORMAP框架,就不知道怎么做了)。

          if (query instanceof org.hibernate.ejb.QueryImpl) {
              ((org.hibernate.ejb.QueryImpl) query).getHibernateQuery().setCacheable(
          true);
          }

          2、還有就是查詢緩存的查詢執行后,會將查詢結果放入二級緩存中,但是放入的形式是以ID為Key,實例作為一個Value。

          3、hibernate的配置文件中需加入如下信息:

          <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider" />
          <property name="hibernate.cache.use_second_level_cache" value="true" />
          <property name="hibernate.cache.use_query_cache" value="true" />


          posted on 2009-04-07 22:54 The Matrix 閱讀(10148) 評論(3)  編輯  收藏 所屬分類: Hibernate

          評論:
          # re: Hibernate緩存配置[未登錄] 2009-04-09 12:17 | 太陽里的雪
          告訴大家千萬不要使用hibernate的查詢緩存,要不然會搞死數據庫,整個網站都會搞死,經驗啊~~~  回復  更多評論
            
          # re: Hibernate緩存配置 2009-04-09 20:02 | The Matrix
          @太陽里的雪
          為什么呢?  回復  更多評論
            
          # re: Hibernate緩存配置 2011-04-07 12:37 | gu8oke
          @太陽里的雪
          搞死數據庫???是你使用的有問題吧  回復  更多評論
            
          <2009年4月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          隨筆分類(72)

          隨筆檔案(67)

          文章分類(5)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 聊城市| 仁怀市| 安顺市| 靖江市| 福建省| 漾濞| 黄大仙区| 宁国市| 乃东县| 南昌县| 米脂县| 宁河县| 宿松县| 盐亭县| 绵阳市| 玛沁县| 托里县| 莒南县| 平武县| 珠海市| 沁阳市| 福清市| 嘉荫县| 伊金霍洛旗| 南澳县| 阆中市| 滕州市| 清徐县| 砚山县| 即墨市| 库尔勒市| 武胜县| 龙岩市| 正蓝旗| 聂荣县| 蒙城县| 鹤山市| 陇西县| 无锡市| 济宁市| 林芝县|