(七)Java對象在Hibernate持久化層的狀態

來源:互聯網
上載者:User

標籤:根據   不為   清除   映射   out   color   rem   action   持久化   

一、概述

-臨時狀態:剛用new語句建立對象,還沒有被持久化,並且不處於Session緩衝中。處於臨時狀態的java對象被稱為臨時對象。

-持久化狀態:已經被持久化,並且加入到Session的緩衝中。處於持久化狀態的java對象被成為持久化對象。

-游離狀態:已經被持久化,但不再處於Session的緩衝中。處於游離狀態的java對象被成為游離對象。

 

臨時對象的特徵:        -OID為null        -不處於Session的緩衝中,也可以說,不被任何一個Session執行個體關聯        -在資料庫中沒有對應的記錄持久化對象的特徵:        -OID不為null        -位於一個Session執行個體的緩衝中,持久化對象總是被一個Session執行個體關聯        -持久化對象和資料庫中的相關記錄對應        -會根據持久化對象的屬性變化,同步更新資料庫。            User  user=(User)session.get(User.class,1);//擷取持久化對象 持久狀態            user.setName("jerry");            transaction.commit();        我們發現我們沒有執行update語句,卻列印了update語句。Hibernate會自動將持久化對象的狀態同步到資料庫中。游離對象的特徵:        -OID不為null        -不再位於Session的緩衝中,也可以說,游離對象不被Session關聯        -資料庫中有對應的記錄 

 

例子:

        //對象狀態轉換的過程        Transaction ts=session.beginTransaction();        User user =new User();                  //臨時狀態         user.setName("tom");         user.setPassword("123456");        session.save(user);                     //轉變為持久化狀態        ts.commit();                            //持久化狀態         session.close();                        //轉變為游離狀態        sessionfactory.close();        System.out.println(user.getName());     //游離狀態 
 二、三種狀態的轉換

 

    1)臨時狀態轉換持久化狀態        -Session的save()方法會將臨時狀態轉換成持久狀態。            把要儲存的對象放入Session緩衝中,使它進入持久化狀態。使用對應檔指定的主鍵建置原則,為持久化對象分配唯一OID。            save方法只是為對象分配UID。我們可以在save方法處打斷點。            當我們的主鍵建置原則為native時,由於我們使用mysql資料庫,主鍵自增,所以執行完save方法後,列印insert語句,mysql資料庫為我們對象自增OID             當我們的主鍵建置原則為incrementt時,increment是由Hibernate維護,先去表中查最大ID然後+1,我們執行完save方法之後,發現列印select尋找最大id的語句,執行commit時才列印插入語句    2)臨時狀態轉換成游離狀態        -將臨時狀態的對象OID設定為資料庫中對應的記錄.        User user=new User();        user.setId(1);    3)持久化狀態轉換成臨時狀態        第一種:            User  user=(User)session.get(User.class,1);//擷取持久化對象 持久狀態            session.close(); //游離狀態            user.setId(null);//臨時狀態         第二種:            User  user=(User)session.get(User.class,1);//擷取持久化對象 持久狀態            session.evict(user); //游離狀態,此方法會將session緩衝中清除持久化對象,使其變為游離狀態            user.setId(null);//臨時狀態      4)持久化狀態轉換成游離狀態        第一:調用session的close方法,持久化狀態變為游離狀態        第二: 調用session的evict()方法方法,將持久狀態轉變為游離狀態    5)游離狀態轉換成臨時狀態        只需要將游離狀態的對象OID變為null。    6)游離狀態轉換成持久狀態        Session的update()方法使游離狀態轉換成持久狀態。            User  user=(User)session.get(User.class,1);//擷取持久化對象 持久狀態            session.evict(user); //游離狀態,此方法會將session緩衝中清除持久化對象,使其變為游離狀態            session.update(user);

 

  

 

  

 

 

(七)Java對象在Hibernate持久化層的狀態

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.