java中Hibernate的狀態總結

在Hibernate框架中對象的存在有不同的狀態,隻有理解瞭這些狀態,才能對Hibernate的工作機制有所認知。主要有四種:瞬時狀態、持久化狀態、脫管狀態和刪除態 。都比較好理解,大致可以看作是臨時、穩定、半穩定、回收的幾種形式,下面就Hibernate的這幾種狀態帶來詳細的介紹。

1.瞬時狀態

通過new開辟內存空間創建的實體對象,但是它沒有納入hibernate session的管理之中,如果沒有變量對它引用,它將會被JVM(垃圾回收器)回收。瞬時狀態的對象在內存中是孤立的,它與數據庫無任何關聯,僅僅是一個信息攜帶的載體。

一個瞬時狀態對象被持久化狀態對象引用,它也會自動變為持久化狀態對象。例如調用session的save、saveorupdate等方法的時候。

特征:

(1)使用 new 創建出來的對象,沒有設置 id 屬性

(2)沒有被 session 托管,換句話說 對象數據 存放在內存中, 沒有存放到 session 緩存中

(3)臨時對象數據 與 數據庫中的數據 還沒任何關聯

2.持久化狀態

持久化狀態對象存在與數據庫中的數據關聯,它總是與會話狀態(Session)和事務(Transaction)關聯在一起。當持久化狀態對象發生變動時並不會立即執行數據庫操作,隻有當事務結束時,才會更新數據庫,以便保證Hibernate的持久化對象和數據庫操作的同步性。

當持久化狀態對象變為托管狀態對象時,它將不在Hibernate持久層的管理范圍之內。

特征:

(1)要麼是從數據庫中使用 get 或 load 方法查詢到的數據對象, 要麼是 使用save 或 update 方法數據轉變成持久層對象

(2)對象 數據被 session 托管。換句話說 對象數據 在 session 緩存中有一份,在數據庫中有相應的記錄

3.脫管狀態

當持久化對象的Session關閉之後,這個對象就從持久化狀態變為托管狀態。托管狀態的對象仍然在與數據庫中的數據關聯,但是他並不在Hibernate的Session管轄范圍之內。

如果將脫管狀態的對象重新關聯到某個新的Session上,它將變回持久化狀態對象。

特征:

(1)主要是通過 持久狀態對象,調用 session.evict() 或 session.clear() 或 session.close() 得到的,也可以new 一個設置 id 值的對象

(2)session 緩存中沒有,內存中有的對象(註: 該對象設置瞭 id 值)

4.刪除態

調用session的delete方法時,對象轉為刪除態。刪除態隻能等待被回收。

知識點擴展:

Hibernate的檢索方式

導航對象圖檢索(根據已經加載的對象,導航到其他對象。)

  •  OID檢索(按照對象的OID來檢索對象。)
  •  HQL檢索(使用面向對象的HQL查詢語言。)
  •  QBC檢索(使用QBC(Qurey By Criteria)API來檢索對象。 QBC/QBE離線/在線)
  •  本地SQL檢索(使用本地數據庫的SQL查詢語句。)

包括Hibernate的檢索方式,Hibernate中對象的狀態,Hibernate的3種檢索策略是什麼,分別適用於哪種場合,ORM解決的不匹配問題, Hibernate映射繼承關系的3種方式,Session的find()方法以及Query接口的區別等方面問題的總結

臨時狀態(transient):剛剛用new語句創建,還沒有被持久化,不處於Session的緩存中。處於臨時狀態的Java對象被稱為臨時對象。

持久化狀態(persistent):已經被持久化,加入到Session的緩存中。處於持久化狀態的Java對象被稱為持久化對象。

遊離狀態(detached):已經被持久化,但不再處於Session的緩存中。處於遊離狀態的Java對象被稱為遊離對象。

Hibernate的3種檢索策略是什麼,分別適用於哪種場合

立即檢索

優點:對應用程序完全透明。

缺點:select語句數目多。

適用:類級別。

延遲檢索

優點:由應用程序決定加載哪些對象,可以避免執行多餘的select語句以及避免加載不需要訪問的對象,節省內存空間,提高檢索效率。

缺點:應用程序如果要訪問遊離態的代理類實例,必須保證它在持久化時已經被初始化。

適用:一對多或多對多關聯。應用程序不需要立即訪問或者根本不會訪問的對象。

迫切左外連接檢索

優點:對應用程序完全透明,不管對象處於持久化狀態還是遊離狀態,應用程序都可以方便的從一個對象導航到另一個與它相關聯的對象。使用瞭外連接,select語句數目少。

缺點:可能會加載程序不許要訪問的對象。復雜的數據庫表連接形象檢索性能。

適用:一對一或多對一關聯。應用程序需要立即訪問的對象。數據庫系統具有良好的表連接性能。

到此這篇關於java中Hibernate的狀態總結的文章就介紹到這瞭,更多相關java之Hibernate的狀態整理內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: