Hibernate實體對象的生命週期(三種狀態詳解)

Hibernate生命週期會經歷三種不一樣的狀態:java


    1.Transient(瞬態):實體對象在內存是自由存在的,即與數據庫中的數據沒有任何關係.換句話說就是:該實體從未與任何持久化上下文關聯過,它沒有持久化標識.例如:    
     數據庫

//建立一個Transient對象
 User user=new User();
user.setName("username");
 user.setPassword("password");
 //此時的user爲一個Transient對象,由於沒有與任何數據庫的任何記錄相關聯.


     特徵:
session

  • 與數據庫中的記錄沒有任何關係,即沒有與其相關聯的數據庫記錄.框架

  • 與session沒有任何關係.即沒有經過session對象的實例對其進行任何持久化的操做.ide

   

    2.Persistent(持久態):該實體對象處於Hibernate框架所管理的狀態,即這個實體對象與Session對象的實例相關聯.例如:spa

//建立一個Transient對象
User user=new User();
 user.setName("username");
 user.setPassword("password");
 //此時的user爲一個Transient對象,由於沒有與任何數據庫的任何記錄相關聯.

 Session session = sessionFactory.openSession();
 Transaction tx=session.beginTransaction();
 //此時的user仍爲一個Transient對象

session.save( user );
 //此時的user爲Persistent
 tx.commit();
 //提交後向數據庫中加入一條記錄.
 Transaction tx2=session.beginTransaction();
 user.setPassword("abc");
 tx2.commit();
//雖然在這個事務中沒有調用Session的save()方法來保存user對象
//但因爲user對象處於persistent狀態,因此對user所作的任何修改都將被持久
//化到數據庫,因此這時數據庫中的密碼已經變爲:abc;
 session.close();

    特徵:
.net

  • 每一個persistent狀態的實體對象都與一個session對象的實例相關聯對象

  • 處於Persistent狀態的實體對象是與數據庫中的記錄相關聯的.blog

  • Hibernate會依據persistent狀態的實體對象的屬性變化而改變數據庫中相對應的記錄.生命週期

   

    3.Detached(遊離態也叫脫管態):對於Persistent對象,當再也不與它所對應的Session對象相關聯時,這個對象就是遊離態.

 //建立一個Transient對象
 User user=new User();http://writeblog.csdn.net/PostEditPlain.aspx
我的空間—後臺
 user.setName("username");
 user.setPassword("password");
 //此時的user爲一個Transient對象,由於沒有與任何數據庫的任何記錄相關聯.

 Session session = sessionFactory.openSession();
 Transaction tx=session.beginTransaction();
 //此時的user仍爲一個Transient對象

 session.save( user );
 //此時的user爲Persistent
 tx.commit();
 //提交後向數據庫中加入一條記錄.

  session.close();
 //此時user爲Detached 狀態,此時對user所進行的任何修改,
 //將不會對數據庫有任何影響.
特徵:
  • 遊離態是由持久態實體對象轉變而來的.

  • 遊離態實體再也不與session對象相關聯.

  • 遊離態實體對象與數據庫中的記錄沒有直接聯繫,對其所作的任何修改將不會影響到到數據庫中的數據.

  • 遊離態實體對象在數據庫有相對應的數據記錄,若是沒有被其餘事務刪除.


原文連接:


http://blog.csdn.net/hgd250/article/details/2775943

相關文章
相關標籤/搜索