1. 程式人生 > >Hiberante持久化對象的3種狀態

Hiberante持久化對象的3種狀態

關閉 align bject span hibernate ansi 都是 transient 理解

近日一同事問我關於Hibernate中對象的3種狀態的問題,因此特意總結一下。在Hibernate中對象是有以下3中狀態:
      • 瞬時態(transient object): 沒有OID值,沒有被session對象管理
      • 持久態(persistent object):有OID值,被session對象管理了
      • 脫管態(detached object):有OID值,沒有被session管理

上面說的這個OID其實是指主鍵屬性,可以簡單的理解為id(一般我們的主鍵都是id)。下面通過代碼來介紹下這3中狀態:
  1. public class Demo2 {
  2. @Test
  3. public void test1(){
  4. Session session = HibernateUtil.getSession();
  5. session.beginTransaction();
  6. //s:沒有IOD,沒有被session管理
  7. //1,這個s對象就是瞬時態對象
  8. Student s =new Student();
  9. s.setName("美美");
  10. //save()方法返回OID的值
  11. Serializable id = session.save(s);
  12. //當前s被session的save執行後
  13. //s: 有OID,已經被session管理了
  14. //2,這個s對象就是持久態對象
  15. System
    .out.println(id);
  16. System.out.println(s.getId()); //持久態對象有id的
  17. session.getTransaction().commit();
  18. session.close();//session關閉了
  19. //s: 有OID,沒有被session對象
  20. //3.這個s對象就是脫管態對象
  21. System.out.println(s.getId());
  22. }
  23. }

關於這3種狀態之間的轉換,我們可以直接看下面這圖就明白了
技術分享圖片

Hiberante持久化對象的3種狀態