Hibernate對象狀態轉化

    Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,完成數據持久化的重任。包括五個核心接口,Hibernat通過這些接口,不僅可以對持久化對象進行存取,還能夠進行事務控制。
    Session接口負責執行被持久化對象的CRUD操作,在hibernate 中使用最爲廣泛,是持久化操作的核心。session的生命週期存在於transaction中,Hibernate中數據庫連接最終包裝成Session對象, 使用Session對象可以對數據庫進行操作。
    Session的創建
    
  Configuration config = new Configuration().configure();  
  SessionFactory sessions = config.buildSessionFactory();
     
      對象在生命週期中有三種狀態,transient(瞬時狀態),persistent(持久化狀態)以及detached(離線狀態),臨時狀態(Transient):用new創建的對象,它沒有持久化,沒有處於Session中,處於此狀態的對象叫臨時對象;持久化狀態(Persistent):已經持久化,加入到了Session緩存中。如通過hibernate語句保存的對象。處於此狀態的對象叫持久對象;遊離狀態(Detached):持久化對象脫離了Session的對象。如Session緩存被清空的對象。特點:已經持久化,但不在Session緩存中。處於此狀態的對象叫遊離對象。

     瞬時態(Transient)
     由new操作符創建,尚未與Hibernate Session關聯的對象被認定爲瞬時(Transient)的。瞬時(Transient)對象沒有被存入任何數據表中,也不會被持久化到數據庫中,一旦不被其他對象引用,他們的狀態立即消失。
     瞬時態對象創建
  
   User user - new User();
   user.SetName("Tom");
   user.SetSex("Man");


    瞬時狀態的特點有:
1、 與數據庫中的記錄沒有任何關聯,也就是沒有與其相關聯的數據庫記錄。
2、 與Session沒有任何關係,也就是沒有通過Session對象的實例對其進行任何持久化的操作。
  
    持久態(Persistent)
    持久化狀態(Persistent):與session關聯並且在數據庫中有相應數據。已經持久化,加入到了Session緩存中。如通過hibernate語句保存的對象。處於此狀態的對象叫持久對象。

    瞬時態轉化持久態

    

    User user - new User();
    user.SetName("Tom");
    user.SetSex("Man");
    Session session = sessionFactory.openSession();
    Transaction transaction = session.beginTransation();
    session.save(user);        //user處於持久化狀態
    transaction.commit();
    session.close();

    持久對象特點:
       1. 和session實例關聯;
       2. 在數據庫中有與之關聯的記錄。


   Hibernate三種狀態之三:遊離狀態(Detached):持久化對象脫離了Session的對象。如Session緩存被清空的對象。特點:已經持久化,但不在Session緩存中。處於此狀態的對象叫遊離對象,即當持久態歐對象不再與session關聯時,則變爲遊離狀態。

    

    User user - new User();
    user.SetName("Tom");
    user.SetSex("Man");
    Session session = sessionFactory.openSession();
    Transaction transaction = session.beginTransation();
    session.save(user);
    transaction.commit();
    session.close();            //關閉session後,user處於遊離狀態 

  遊離態對象特點:
      遊離態對象不再與session實例關聯。
      遊離態對象屬性值的改變不會同步到數據庫。
    
 三態之間的轉換方法:
對象通過構造方法成爲自由態;持久態和遊離態則通過session的delete方法成爲自由態.
對象可以由session的load或get方法直接成爲持久態;自由態對象可以通過save,saveOrUpdate或persist方法成爲持久態;遊離態對象則可以通過update,saveOrUpdate成爲持久態.
遊離態只能由持久態轉換而來,通過close或clear方法實現。   
     
      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章