Ordinary hut

          人間一福地,勝似天仙宮
          posts - 61, comments - 50, trackbacks - 0, articles - 1

          關(guān)于spring+hibernate的FlushMode的記錄

          Posted on 2009-11-25 22:55 landor 閱讀(5031) 評論(0)  編輯  收藏 所屬分類: hibernate
          參見hibernate的api說明https://www.hibernate.org/hib_docs/v3/api/org/hibernate/FlushMode.html

          說明FlushMode有五種屬性

          1 NEVEL  
          已經(jīng)廢棄了,被MANUAL取代了

          2 MANUAL 
          spring3.x中的opensessioninviewfilter已經(jīng)將默認的FlushMode設置為MANUAL了;
          如果FlushMode是MANUAL或NEVEL,在操作過程中hibernate會將事務設置為readonly,所以在
          增加、刪除或修改操作過程中會出現(xiàn)如下錯誤
          org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read
          -only mode (FlushMode.NEVER) - turn your Session into FlushMode.AUTO or remove 'readOnly' marker from transaction definition;
          解決辦法網(wǎng)上有很多;
          1 配置事務,spring會讀取事務中的各種配置來覆蓋hibernate的session中的FlushMode;
          2 先編程式修改FlushMode,比如session.setFlushMode(FlushMode.AUTO); 這樣hibernate就會自動去除readonly限制;
          3 直接修改opensessioninviewfilter過濾器的配置,配置過濾器的時候配置
          <filter>
                
          <filter-name>openSession</filter-name>
                
          <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
                
          <init-param>
                    
          <param-name>flushMode</param-name>
                    
          <param-value>AUTO</param-value>
                
          </init-param>
            
          </filter>
          3 AUTO
          設置成auto之后,當程序進行查詢、提交事務或者調(diào)用session.flush()的時候,都會使緩存和數(shù)據(jù)庫進行同步,也就是刷新數(shù)據(jù)庫
          4 COMMIT
          提交事務或者session.flush()時,刷新數(shù)據(jù)庫;查詢不刷新

          5 ALWAYS
          每次進行查詢、提交事務、session.flush()的時候都會刷數(shù)據(jù)庫
          這里需要說一下和AUTO的區(qū)別,當hibernate緩存中的對象被改動之后,會被標記為臟數(shù)據(jù)(即與數(shù)據(jù)庫不同步了)。當session設置為FlushMode.AUTO時,hibernate在進行查詢的時候會判斷緩存中的數(shù)據(jù)是否為臟數(shù)據(jù),是則刷數(shù)據(jù)庫,不是則不刷,而always是直接刷新,不進行任何判斷。很顯然auto比always要高效得多。


          主站蜘蛛池模板: 肃北| 从化市| 岫岩| 肇庆市| 五指山市| 昌都县| 大新县| 荥阳市| 隆尧县| 黄陵县| 文成县| 德江县| 黔东| 黑河市| 资源县| 馆陶县| 丹阳市| 广河县| 都安| 福清市| 临沭县| 上林县| 叙永县| 德江县| 益阳市| 内黄县| 乌兰察布市| 阿克苏市| 建平县| 江孜县| 宣城市| 海淀区| 洛隆县| 邳州市| 台湾省| 江阴市| 清涧县| 元朗区| 诏安县| 信阳市| 保德县|