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的狀態整理內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: