舉例理解Hibernate的三種狀態


  初學Hibernate,了解到Hibernate有三種狀態:transient(瞬時狀態),persistent(持久化狀態)以及detached(游離狀態)。

  它們之間有如下轉換圖來說明:

  

  1、transient(瞬時狀態)。

 

  如上圖所示,當new出來一個新對象,還沒有保存到數據庫中的時候,就是transient狀態。

  代碼表示如下: 

 1             session=HibernateUtils.getSession();
 2             tx=session.beginTransaction();
 3             //Transient狀態
 4             User user=new User();
 5             user.setName("Jessica");
 6             user.setPassword("123");
 7             user.setCreateTime(new Date());
 8             user.setExpireTime(new Date());
 9             //**********************************************************************
10              /*
11              *  以上user就是一個Transient(瞬時狀態),此時user並沒有被session進行托管,即在session的
12              *  緩存中還不存在user這個對象,當執行完save方法后,此時user被session托管,並且數據庫中存在了該對象
13              *  user就變成了一個Persistent(持久化對象)
14              */
15             //***********************************************************************    

   2、persistent(持久化狀態)。

  當臨時狀態的對象被執行save之后,就會被session托管,在session中有一個map存放着user對象,也就是說user對象被session引用着,被session納入管理了。此時的user就處於持久狀態了。

 1             session=HibernateUtils.getSession();
 2             tx=session.beginTransaction();
 3             //Transient狀態
 4             User user=new User();
 5             user.setName("Jessica");
 6             user.setPassword("123");
 7             user.setCreateTime(new Date());
 8             user.setExpireTime(new Date());
 9             //**********************************************************************
10              /*
11              *  以上user就是一個Transient(瞬時狀態),此時user並沒有被session進行托管,即在session的
12              *  緩存中還不存在user這個對象,當執行完save方法后,此時user被session托管,並且數據庫中存在了該對象
13              *  user就變成了一個Persistent(持久化對象)
14              */
15             //***********************************************************************
16             //Persistent狀態
17             session.save(user);

                                                                                                  

   3、detached(游離狀態)。

 

  當持久狀態的對象user,在session關閉之后就會變成有游離狀態。

 1         Session session=null;
 2         Transaction     tx=null;
 3         
 4         try {
 5             session=HibernateUtils.getSession();
 6             tx=session.beginTransaction();
 7             //Transient狀態
 8             User user=new User();
 9             user.setName("Jessica");
10             user.setPassword("123");
11             user.setCreateTime(new Date());
12             user.setExpireTime(new Date());
13             //**********************************************************************
14              /*
15              *  以上user就是一個Transient(瞬時狀態),此時user並沒有被session進行托管,即在session的
16              *  緩存中還不存在user這個對象,當執行完save方法后,此時user被session托管,並且數據庫中存在了該對象
17              *  user就變成了一個Persistent(持久化對象)
18              */
19             //***********************************************************************
20             //Persistent狀態
21             session.save(user);
22             
23             //進行修改操作,修改name=“Juyahong”
24             user.setName("Juyahong");
25             //提交事務
26             tx.commit();
27             
28         } catch (Exception e) {
29             e.printStackTrace();
30             if (tx != null) {
31                 tx.rollback();
32             }
33         } finally{
34             
35             HibernateUtils.closeSession(session);
36         }
37         
38         //detached狀態

   通過以上例子,可以基本理解了Hibernate的三種狀態,其實可以舉個例子來說明:我們把數據庫比喻成一個登記簿,當我們把信息登記到登記簿上的時候,這個過程就是持久化的過程。當登記完成之后,登記簿上的數據就是持久態數據,所謂持久態就是一直存在的狀態。當我們需要用數據的時候,會從登記簿上查信息,我們查到的信息記錄在臨時的紙張或者腦海里,然后登記簿會放回原位,這時候臨時紙張上或者腦海里的數據就是游離態,隨時可能被遺忘,在hibernate中就是隨時會被銷毀的數據。瞬態數據和游離態數據有點兒類似,但是一點,就是他是存在持久化之前的數據,就是說我需要登記個人信息,我的個人信息還沒有登記到登記簿上的時候,信息就是瞬態,一旦登記到登記簿上就變成持久態了,然后再查詢到的就是游離態。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM