Hibernate持久化類的三種狀態

一、三種狀態

1、瞬時態(transient)

     瞬時態對象沒有唯一標識OID.沒有納入Session的管理.

2、持久態(persistent)

    持久化對象有唯一標識OID.已經納入到Session的管理,持久態對象有自動更新數據庫的能力.

3、脫管態(detached)

   持久化對象有唯一標識OID,沒有納入到Session管理.

二、三種狀態的相互轉化

       (1)瞬時態

                獲得:構造對象

                瞬時態---->持久態  save方法

                瞬時態---->脫管態  設置唯一標識 (OID)

       (2)持久態

                獲得:get/load/save/iterate方法

                持久態---->瞬時態 delete方法

                持久態---->脫管態 session的close/clear/evict方法

       (3)脫管態

                獲得:構造對象,設置唯一標識

                脫管態---->瞬時態 設置唯一標識爲null

                脫管態---->持久態 update方法

三、Hibernate一級緩存的管理  

               clear:清空一級緩存的所有對象

               evict:清除指定對象

               flush:控制sql語句的發出時機

               refresh:快照區的數據覆蓋緩存區數據

四、Hibernate一級緩存的刷出時機

              session.setHibernateFlushMode()方法可以設置hibernate一級緩存的刷出時機。

              * ALWAYS     :每次查詢的時候都會刷出.手動調用flush.事務提交的時候.

              * AUTO      :默認值.有些查詢會刷出.手動調用flush.事務提交的時候.

              * COMMIT     :在事務提交的時候,手動調用flush的時候.

              * MANUAL     :只有在手動調用flush纔會刷出.

令:

           * update方法每次都會發送sql,可以在class標籤設置select-before-update="true",再更新之前先查詢,如果緩存區數據和快照區數據不一致再更新。

             *  saveOrUpdate方法可能操作OID不存在的持久化對象,在這時程序會報錯。可以在id標籤設置 unsaved-value="X",當要更新的id不存在時,向數據庫插入一條記錄。

  

         

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