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對象相關聯.
遊離態實體對象與數據庫中的記錄沒有直接聯繫,對其所作的任何修改將不會影響到到數據庫中的數據.
遊離態實體對象在數據庫有相對應的數據記錄,若是沒有被其餘事務刪除.
原文連接: