hibernate 實體對象的生命週期

hibernate 實體對象的生命週期主要分爲三個狀態,Transient(瞬態),Persistent(持久態),Detached(遊離態)。
    1.Transient(瞬態) 表示該實體對象在內存中是自由的,也就是說和數據庫沒有任何關係。
     //創建一個瞬態對象
     User user = new User();
     user.setName(userName);
     user.setPassword("test");
    //user仍是一個瞬態對象
 
    2.Persistent(持久態) 是指該實體對象處於Hibernate框架所管理的狀態,也就是說這個實體對象與session對象的實例相關。
      處於持久太的實體對象最大的特徵是對其所做的任何變更操作都將被Hibernate持久化到數據庫層。
   //創建一個瞬態對象
     User user = new User();
     user.setName(userName);
     user.setPassword("test");
   //user仍是一個瞬態對象

Session session = sessionFactory.openSession();
Tansaction tx = session.beginTansaction();
//此時user仍是一個瞬態對象
session.save(user);
//此時user已變爲持久態
tx.commit();

Tansaction tx2 = session.beginTansaction();
user.setPassword("pdw");
tx2.commit();
//雖然在這個事物中並沒有調用session的save()方法來保存user對象,但是usr處於持久太,
//所以對user對象所做的任何修改都持久化到數據庫中
//那麼數據庫中的密碼也變成了pdw

session.close();

另一種方法直接得到持久態的對象:

Session session = sessionFactory.openSession();
Tansaction tx = session.beginTansaction();
User user = (User) session.load(User.class,"key");
//user對象已是持久太對象
tx.commit();
session.close();

3.Detached(遊離態)是指處於持久態的對象,當不再與他所對應的Session對象向關聯時,這個對象就變成遊離態了。

  //創建一個瞬態對象
     User user = new User();
     user.setName(userName);
     user.setPassword("test");
   //user仍是一個瞬態對象
 
Session session = sessionFactory.openSession();
Tansaction tx = session.beginTansaction();
//此時user仍是一個瞬態對象
session.save(user);
//此時user已變爲持久態
tx.commit();
session.close();
//user對象已經變成遊離態

session close完後,對象就變成遊離態。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章