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

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

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

    Hibernate 實體對象的生命周期匯總

    本帖匯總了網上幾篇關于hibernate的生命周期的帖子。

    轉載:

    實體對象的生命周期在Hibernate應用中是一個很關鍵的概念,正確的理解實體對象的生命周期將對我們應用Hibernate做持久層設計起到很大的作用.而所謂的實體對象的生命周期就是指實體對象由產生到被GC回收的一段過程.在這過程中我們需要理解的就是實體對象生命周期中的三種狀態.

    1. 自由狀態(Transient)
    所謂的Transient狀態,即實體對象在內存中自由存在,與數據庫中的記錄無關,通常是我們的J2EE中 VO,并沒有被納入Hibernate的實體管理容器.

    1    Test test = new Test();
    2        test.setName("energykk");
    3        //此時的test對象處于Transient(自由狀態)并沒有被Hibernate框架所管理
    4        

    2.持久狀態(Persistent)
    何謂 Persistent? 即實體對象已經處于被Hibernate實體管理容器容器所管理的狀態.這種狀態下這個實體對象的引用將被納入Hibernate實體管理容器容器所管理.
    處于Persistent狀態的實體對象,對它的變更也將被固化到數據庫中.
    在J2EE中通常指的是一個PO.
    Transaction tr = session.beginTransaction();
            session.save(test);
            
    //此時的test對象已經處于Persistent(持久狀態)它被Hibernate 納入實體管理容器
            tr.commit();
            Transaction tr2 
    = session.beginTransaction();
            test.setName(
    "xukai");
            
    //在這個事務中我們并沒有顯示的調用save()方法但是由于Persistent狀態的對象將會自動的固化到
            
    //數據庫中,因此此時正處在Persistent狀態的test對象的變化也將自動被同步到數據庫中
            tr2.commit();

    處于Persistent狀態的實體可以簡單的理解為:如果一個實體對象與session發生了關聯,并且處于session的有效期內,那么這個實體對象就處于Persistent狀態.

    3.游離狀態(Detached)
    處于Persistent狀態的實體對象,其對應的session關閉以后,那么這個實體就處于 Detached狀態.
    我們可以認為session對象就是一個Persistent的宿主,一旦這個宿主失效,那么這個實體就處于 Detached狀態.

    session.close();
            
    //與test對象關聯的session被關閉,因此此時的test對象進入 Detached(游離狀態)
            
            session2 
    = HibernateSessionFactory.getSession();
            Transaction tr3 
    = session2.beginTransaction();
            session2.update(test);
            
    //此時正處于Detached狀態的test對象由于再次借助與session2被納入到Hibernate的實體管理容器所以此時的
            
    //test對象恢復到Persistent狀態
            test.setName("jjjj");
            tr3.commit();
            
            session2.close();

    既然Transient狀態的實體與Detached狀態的實體都與Hibernate的實體管理容器沒有關系,那他們到底存在哪些差異?
    差異就在于處于Transient狀態的只有一個Name的屬性.此時的test對象所包含的數據信息僅限于此,他與數據庫中的記錄沒有任何瓜葛.
    但是處于Detached狀態的實體已經不止包含Name這個屬性,還被賦予了主鍵也就是通常POJO里的id屬性,由于id是主鍵,他可以確定數據庫表中的一條
    唯一的記錄,那么自然的處于Detached狀態的實體就能與數據庫表中擁有相同id的記錄相關聯.
    這就是他們之間所存在的差異, 簡而言之,Transient狀態的實體缺乏與數據庫表記錄之間的聯系,而Detached狀態的試題恰恰相反.只不過是脫離了session這個數據庫操作平臺而已.
    原帖地址 : http://m.tkk7.com/energykk/archive/2007/05/08/115927.html

     生命周期圖:
    原圖地址:http://hi.baidu.com/quest2run/blog/item/39e1d08c7dbd45f4503d9222.html
     

    persistence context



    生命周期特征總結 :
    原帖地址 : http://blog.csdn.net/hgd250/archive/2008/08/06/2775943.aspx
    Transient:

        與數據庫中的記錄沒有任何關系,即沒有與其相關聯的數據庫記錄.
        與session沒有任何關系.即沒有通過session對象的實例對其進行任何持久化的操作
    Persistent:
        每個persistent狀態的實體對象都與一個session對象的實例相關聯
        處于 Persistent狀態的實體對象是與數據庫中的記錄相關聯的.
        Hibernate會依據persistent狀態的實體對象的屬性變化而改變數據庫中相對應的記錄
    .
    Detached:
        游離態是由持久態實體對象轉變而來的.
        游離態實體不再與session對象相關聯.
        游離態實體對象與數據庫中的記錄沒有直接聯系,對其所做的任何修改將不會影響到到數據庫中的數據.
        游離態實體對象在數據庫有相對應的數據記錄,如果沒有被其他事務刪除.

    posted on 2011-02-14 14:26 AK47 閱讀(333) 評論(0)  編輯  收藏 所屬分類: Hibernate


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


    網站導航:
     
    <2011年2月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272812345
    6789101112

    導航

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲中文字幕久在线| 曰批全过程免费视频免费看| 又色又污又黄无遮挡的免费视| 皇色在线免费视频| 亚洲人成电影在线观看网| 亚洲性日韩精品国产一区二区| 99久久免费看国产精品| 在线观看亚洲电影| 久久综合亚洲鲁鲁五月天| 亚洲免费在线观看| 久久久久国色AV免费看图片 | 蜜桃视频在线观看免费视频网站WWW| 亚洲中文无码av永久| 综合亚洲伊人午夜网| 思思99re66在线精品免费观看| 在线观看特色大片免费网站| 亚洲国产欧美国产综合一区| 亚洲精品自产拍在线观看动漫| 四虎永久免费观看| 色窝窝免费一区二区三区| h视频免费高清在线观看| 国产精品亚洲精品观看不卡| 亚洲成年轻人电影网站www | 久久亚洲精品高潮综合色a片| 亚洲成年人在线观看| 精品亚洲一区二区三区在线播放| 和日本免费不卡在线v| 免费精品无码AV片在线观看| 激情吃奶吻胸免费视频xxxx| 亚洲粉嫩美白在线| 亚洲高清在线mv| 亚洲精品国偷自产在线| www.91亚洲| 国产午夜鲁丝片AV无码免费| 黄色片在线免费观看 | 亚洲国产精品无码专区影院| 亚洲国产成人久久综合一区77| 嫩草影院免费观看| 免费看成人AA片无码视频羞羞网| 日韩免费在线视频| 中国毛片免费观看|