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

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

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

    posts - 66,  comments - 11,  trackbacks - 0
        實體對象,特指Hibernate O/R映射關系中的域對象。實體對象生命周期中的3種狀態
        1、Transient(自由狀態):所謂Transient,即實體對象在內存中的自由存在,它與數據庫中的記錄無關。
        2、Persistent(持久狀態):即實體對象處于由Hibernate框架所管理的狀態。
        3、Detached(游離狀態):處于Persistent狀態的對象,其對應的Session實例關閉之后,那么,此對象就處于"Detached"狀態。
        Transient狀態的user對象與庫表的數據缺乏對應關系,而Detached狀態的user對象,卻在庫表中存在對應的記錄,只不過由于Detached對象脫離了session這個數據操作平臺,其狀態的變化無法更新到庫表中的對應記錄。
        處于Transient和Detached狀態的對象統稱為值對象(VO),而處于Persistent狀態的對象稱為持久對象(PO).這是站在實體對象是否被納入Hibernate實體管理容器的立場加以區分的,非管理的實體對象統稱為VO,而被管理的實體對象稱為PO.
    VO與PO的主要區別在于:
    1、VO是相對獨立的實體對象,處于非管理狀態。
    2、PO是由Hibernate納入其實體管理容器的對象,它代表了與數據庫中某條記錄對應的Hibernate實體,PO的變化在事務提交時將反映到實際數據庫中
    3、如果一個PO與其對應的Session實例分離,那么此時,它又會變成一個VO。

        不覆蓋equals/hashCode方法的情況下我們要面對的問題:實體對象的跨session識別。解決辦法一個是實現所謂的值比對,即在equals/hashCode方法中,對實體類的所有屬性值進行比對.除了值比對,還有另外一種基于業務邏輯的對象判定方式業務關鍵信息判定。

        tx.commint();方法中會調用session.flush()方法,在flush()方法中會執行2個主要任務
    1、flushEverything();//刷新所有數據
    2、execute(0);//執行數據庫SQL完成持久化動作。

        數據緩存:在特定硬件基礎上緩存往往是提升系統性能的關鍵因素。緩存是數據庫數據在內存中的臨時容器,它包含了庫表數據在內存中的臨時拷貝,位于數據庫與數據訪問層之間。ORM在進行數據讀取時,會根據其緩存管理策略,首先在緩存中查詢,如果在緩存中發現所需數據,則直接以此數據作為查詢結果加以利用,從而避免了數據庫調用的性能開銷。
        相對內存操作而言,數據庫調用是一個代價高昂的過程,對于典型企業及應用結構,數據庫往往與應用服務器位于不同的物理服務器,這也就意味著每次數據庫訪問都是一次遠程調用,Socket的創建與銷毀,數據的打包拆包,數據庫執行查詢命令,網絡傳輸上的延時,這些消耗都給系統整體性能造成了嚴重影響。
        ORM的數據緩存應包含如下幾個層次:
    1、事務級緩存:事務級緩存是基于Session生命周期實現的,每個Session會在內部維持一個數據緩存,此緩存隨著Session的創建而存在,因此也成為Session Level Cache(內部緩存)
    2、應用級/進程級緩存:在某個應用中,或者應用中某個獨立數據訪問子集中的共享緩存。此緩存可由多個事物共享。在Hibernate中,應用級緩存在SessinFactory層實現,所有由此SessionFactory創建的Session實例共享此緩存。多實例并發運行的環境要特別小心進程級緩存的調用。
    3、分布式緩存:分布式緩存由多個應用級緩存實例組成集群,通過某種遠程機制實現各個緩存實例間的數據同步,任何一個實例的數據修改操作,將導致整個集群間的數據狀態同步。由于多個實例間的數據同步機制,每個緩存實例發生的變動都會復制到其余所有節點中,這樣的遠程同步開銷不可忽視。

        Hibernate數據緩存分為2個層次,1、內部緩存2、二級緩存hibernate中,緩存將在以下情況中發揮作用:
    1、通過ID加載數據時
    這包括了根據id查詢數據的Session.load方法,以及Session.ierate等批量查詢方法
    2、延遲加載

        Session在進行數據查詢操作時,會首先在自身內部的一級緩存中進行查找,如果一級緩存未能命中,則將在二級緩存中查詢,如果二級緩存命中,則以此數據作為結果返回。
        如果數據滿足以下條件,則可將其納入緩存管理
    1、數據不會被第三方應用修改
    2、數據大小在可接受的范圍之內
    3、數據更新頻率較低
    4、同一數據可能會被系統頻繁引用
    5、非關鍵數據(關鍵數據,如金融賬戶數據)
    Hibernate本身并未提供二級緩存的產品化實現(只是提供了一個基于Hashtable的簡單緩存以供調試),而是為眾多的第三方緩存組件提供了接入接口,我們可以根據實際情況選擇不同的緩存實現版本。

       
    posted on 2009-12-22 15:01 王永慶 閱讀(219) 評論(0)  編輯  收藏 所屬分類: HIBERNATE
    <2009年12月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    關注blogs

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费大黄网站在线看| 中文字幕免费在线| 日韩精品亚洲专区在线观看| 在线成人爽a毛片免费软件| 激情97综合亚洲色婷婷五| 国产国产人免费人成成免视频| 免费a级毛片视频| jizz免费在线观看| 久久精品国产69国产精品亚洲| 高清永久免费观看| 亚洲激情在线观看| 99免费观看视频| 国产亚洲玖玖玖在线观看| 日本免费中文字幕在线看| 理论亚洲区美一区二区三区| 亚洲精品无码永久在线观看| 免费无码又爽又刺激一高潮| 911精品国产亚洲日本美国韩国| 国产成人精品免费午夜app| 亚洲精品天堂在线观看| 亚洲Av无码国产情品久久 | 日韩大片免费观看视频播放| ZZIJZZIJ亚洲日本少妇JIZJIZ| 国产一区二区免费视频| 亚洲成年人免费网站| 日本午夜免费福利视频| a级毛片毛片免费观看久潮| 亚洲高清不卡视频| 国产亚洲精品免费| 亚洲jizzjizz在线播放久| 最新69国产成人精品免费视频动漫 | 亚洲精品国产成人99久久| 国产精品成人免费一区二区| 免费在线人人电影网| 亚洲av无码一区二区三区乱子伦 | 99ee6热久久免费精品6| 亚洲欧美日韩综合久久久久| 国产综合精品久久亚洲| 免费精品国偷自产在线在线 | 在线a人片天堂免费观看高清| xvideos永久免费入口|