<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Jason ---分享,共同進(jìn)步

    激情成就夢想,努力創(chuàng)造未來
    隨筆 - 53, 文章 - 1, 評論 - 45, 引用 - 0
    數(shù)據(jù)加載中……

    hibernate lazy

    今天項(xiàng)目組有要使用的hibernate lazy的,我一直對這種lazy的方式是不贊成使用的,所以我的項(xiàng)目組內(nèi)是明確不能使lazy,包括true和false當(dāng)然hibernate 默認(rèn)的模式是true ,但是在程序中我們是可以控制,當(dāng)然如果不做配置話,也無法在前端使用,其實(shí)在項(xiàng)目中,用到lazy的時候并不是特別多(個人觀點(diǎn)),大部分的數(shù)據(jù)都是明確的要在后臺查詢出來的。用lazy也并不復(fù)雜,在web.xml中配置

    Xml代碼 復(fù)制代碼
    1. <filter>  
    2.     <filter-name>hibernateFilter</filter-name>  
    3.     <filter-class>  
    4.         org.springframework.orm.hibernate3.support.OpenSessionInViewFilter   
    5.     </filter-class>  
    6.     <init-param>  
    7.         <param-name>singleSession</param-name>  
    8.         <param-value>false</param-value>  
    9.     </init-param>  
    10. </filter>  
    11.   
    12. <filter-mapping>  
    13.     <filter-name>hibernateFilter</filter-name>  
    14.     <url-pattern>*.do</url-pattern>  
    15. </filter-mapping>  

     

    就可以使用延遲加載了,spring通過filter的方式對綁定hibernate session 到request的線程中。

    that binds a Hibernate Session to the thread for the entire processing of the request

     

    剛開始我是把上面這段配置隨便放到web.xml中,一致不成功總報session 關(guān)閉,不起作用,最后查了一下,我把這個filter放到了struts的filter之上,就可以了。

     

     

    說明FlushMode有五種屬性

    1 NEVEL  

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


    2 MANUAL

    spring3.x中的opensessioninviewfilter已經(jīng)將默認(rèn)的FlushMode設(shè)置為MANUAL了;
    如果FlushMode是MANUAL或NEVEL,在操作過程中hibernate會將事務(wù)設(shè)置為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 配置事務(wù),spring會讀取事務(wù)中的各種配置來覆蓋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

    設(shè)置成auto之后,當(dāng)程序進(jìn)行查詢、提交事務(wù)或者調(diào)用session.flush()的時候,都會使緩存和數(shù)據(jù)庫進(jìn)行同步,也就是刷新數(shù)據(jù)庫

    4 COMMIT

    提交事務(wù)或者session.flush()時,刷新數(shù)據(jù)庫;查詢不刷新


    5 ALWAYS

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

     

    posted on 2011-08-12 13:17 agun 閱讀(920) 評論(0)  編輯  收藏 所屬分類: java web

    主站蜘蛛池模板: 91免费国产在线观看| 国产在线国偷精品免费看| 四虎在线视频免费观看视频| 在线亚洲精品福利网址导航| 日韩在线一区二区三区免费视频| 在线观看免费为成年视频| 久久嫩草影院免费看夜色| 亚洲国产高清精品线久久| 国产亚洲成在线播放va| 又黄又爽一线毛片免费观看| 亚洲爆乳AAA无码专区| 免费毛片在线播放| 老司机精品视频免费| 亚洲国产成人久久综合野外| 亚洲精品国产日韩无码AV永久免费网| 亚洲第一成人影院| 一区二区视频免费观看| 国产亚洲自拍一区| 国产无遮挡裸体免费视频在线观看| 亚洲国产精品成人精品无码区在线| 少妇性饥渴无码A区免费| 久久国产精品亚洲一区二区| 国产成人精品免费视频网页大全| 亚洲不卡影院午夜在线观看| 精品国产免费一区二区| free哆拍拍免费永久视频| 亚洲精品综合一二三区在线| 福利免费观看午夜体检区| 美女被免费视频网站| 亚洲熟妇av一区二区三区| 亚洲免费观看网站| 羞羞漫画小舞被黄漫免费| 亚洲熟女少妇一区二区| 成人免费激情视频| 大片免费观看92在线视频线视频| 亚洲大尺度无码专区尤物| 成年女人毛片免费观看97| 久久九九久精品国产免费直播| 久久亚洲精品人成综合网| 日本牲交大片免费观看| a级毛片免费全部播放|