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

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

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

    posts - 64,  comments - 9,  trackbacks - 0

    Hiberante3 一級緩存總結

    1.             Session 級別的緩存,它同session邦定。它的生命周期和session相同。Session消毀,它也同時消毀;管理一級緩存,一級緩存無法取消,用兩個方法管理,clear(),evict()

    2.             兩個session 不能共享一級緩存,因它會伴隨session的生命周期的創建和消毀;

    3.             Session緩存是實體級別的緩存,就是只有在查詢對象級別的時候才使用,如果

    使用HQLSQL是查詢屬性級別的,是不使用一級緩存的!切記!!!!

    4 .  iterate 查詢使用緩存,會發出查詢IdSQLHQL語句,但不會發出查實體的,

    它查詢完會把相應的實體放到緩存里邊,一些實體查詢如果緩存里邊有,就從緩存中查詢,但還是會發出查詢idSQLHQL語句。如果緩存中沒有它會數據庫中查詢,然后將查詢到的實體一個一個放到緩存中去,所以會有N+1問題出現。

    5 . List()iterate 查詢區別:

    使用iterate,list查詢實體對象*N+1問題,在默認情況下,使用query.iterate查詢,有可以能出現N+1問題

    所謂的N+1是在查詢的時候發出了N+1sql語句1:首先發出一條查詢對象id列表的sqlN:

    根據id列表到緩存中查詢,如果緩存中不存在與之匹配的數據,那么會根據id發出相應的sql語句listiterate的區別?

    list每次都會發出sql語句,list會向緩存中放入數據,而不利用緩存中的數據

    iterate:在默認情況下iterate利用緩存數據,但如果緩存中不存在數據有可以能出現N+1問題

    6Get()load(),iterate方法都會使用一級緩存,

     

    7.hiberate3 session 存儲過程如下:

           例如 object 對象

           Session.save(object);

           這時候不會把數據放到數據庫,會先放到session緩存中去,數據庫中沒有相應記錄,session.flush();才發SQLHQL語句,數據庫中有了相應記錄,

           但是數據庫用select查不到,這是跟數據庫事物級別有關系,(這里在說下數據庫的事務隔離級別一共四種如下:)
        數據庫隔離級別:
            隔離級別                       是否存在臟讀  是否存在不可重復讀     是否存在幻讀;
        Read UnCommited(未提交讀)               Y            Y                     Y
        Read Commited (提交讀 oraclel默認)      N            Y                     Y
        Repeatable Read(不可重復讀(Msql默認))  N            N                     Y 
        Serializable(使用很少)                  N            N                     N

        


           Session.beginTrransaction().commit();

           事物提交后可以查詢到了。

    Session.flush()語句但是為什么不寫呢,因為commit()會默認調用flush();


    Hiberante3 二級緩存總結

    1.Hibernate3的(sessionFactory)二級緩存和session級別的緩存一樣都只對實體對象做緩存,不對屬性級別的查詢做緩存;二級緩存的生命周期和sessionFactory的生命周期是一樣的,sessionFactory可以管理二級緩存;

    2.sessionFactory級別的緩存,需要手動配置;所有的session可以共享sessionFactory 級別的緩存;(一般把一些不經常變化的實體對象放到sessionFactory級別的緩存中,適合放不經常變化的實體對象。)

    3.Hiberante3二級緩存的配置和使用方法如下:

    1. 必須把ehcache.jar包導入,然后到Hibernate3.2etc文件下把ehcache.xml復制到工程src目錄下(ehcache.xml里邊的參數里邊有詳細英文說明);

    (說明:ehcache.jar是第三方法的緩存產品,hiberante只是把它做了集成,還有好多第三方hibernate集成的緩存產品,相關說明請查閱hiberante3開發手冊;ehcache支持分布應用的(這個和Hibernate3.2開發手冊有出入,經過官網查證確實支持了),如果有分布式需求,請換成支持分布式的二級緩存產品,hiberate3開發手冊都有相頭說明。配置方法都類似);

    4.Hibernate3的二級緩存默認是開起的,也可以指定開起。在hibernate.cfg.xml 文件下配置如下:

    *修改hibernate.cfg.xml文件,開戶二級緩存;

                         <property name=”hibernate.cache.use_second_level_cache”>true</property>

                         *指定二級緩存產品的提供商;

    <property name=”hibernate.cache.provider_class”>de> org.hibernate.cache.EhCacheProviderde>

    </property>

    要讓那些實體使用二級緩存,在hibernate.cfg.xml配置文件中加入:

    <!—

    讓這個實體用二級緩存 也可以在實體中映射文件去配置即:

    <cache usage="read-only"/>

    -->

    <class-cache class=”com.zzz.hibernate.ClassT” usage=”read-only”/>

    Read-only一般使用這個策略,其它的hibernate3開發手冊中也有詳細介紹;

    CacheModehibernate3開發手冊中搜索這個關鍵字,可以找到一級緩存和二級緩存交互使用的問題;

    posted on 2009-09-11 15:24 super_nini 閱讀(861) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2009年9月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿

    隨筆檔案

    文章檔案

    相冊

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日本不卡免费新一二三区| www亚洲精品少妇裸乳一区二区| 亚洲国产一区国产亚洲| 最近中文字幕大全免费视频| 亚洲第一成年网站大全亚洲| 毛片免费观看的视频在线| 污网站在线免费观看| 中文字幕亚洲乱码熟女一区二区| 久热免费在线视频| 亚洲六月丁香六月婷婷色伊人| 超pen个人视频国产免费观看| 夜夜爽妓女8888视频免费观看| 亚洲av无码专区国产乱码在线观看| 日本视频一区在线观看免费| 亚洲大尺度无码无码专线一区| 亚洲精品国产va在线观看蜜芽| 人人揉揉香蕉大免费不卡| 亚洲最大福利视频| 亚洲天堂免费在线视频| 999久久久免费精品播放| 亚洲日韩国产AV无码无码精品| 亚洲免费视频一区二区三区| 日本卡1卡2卡三卡免费| 亚洲色大18成人网站WWW在线播放| 亚洲精品高清在线| 999久久久免费精品国产| 无码的免费不卡毛片视频| 亚洲成人福利网站| 亚洲欧洲中文日韩久久AV乱码| 亚洲毛片免费观看| 一区二区三区免费看| 亚洲国产人成在线观看| 国产成人亚洲综合无码| 久久久久久99av无码免费网站| 国产99久久久久久免费看| 亚洲va成无码人在线观看| 久久亚洲中文字幕精品一区四| 亚洲视频网站在线观看| 亚洲GV天堂无码男同在线观看| 亚洲一区爱区精品无码| 成年女人午夜毛片免费看|