今天就跟大家聊聊有關java中Hibernate的狀態有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
1.瞬時狀態
通過new開辟內存空間創建的實體對象,但是它沒有納入hibernate session的管理之中,如果沒有變量對它引用,它將會被JVM(垃圾回收器)回收。瞬時狀態的對象在內存中是孤立的,它與數據庫無任何關聯,僅僅是一個信息攜帶的載體。
一個瞬時狀態對象被持久化狀態對象引用,它也會自動變為持久化狀態對象。例如調用session的save、saveorupdate等方法的時候。
特征:
(1)使用 new 創建出來的對象,沒有設置 id 屬性
(2)沒有被 session 托管,換句話說 對象數據 存放在內存中, 沒有存放到 session 緩存中
(3)臨時對象數據 與 數據庫中的數據 還沒任何關聯
持久化狀態對象存在與數據庫中的數據關聯,它總是與會話狀態(Session)和事務(Transaction)關聯在一起。當持久化狀態對象發生變動時并不會立即執行數據庫操作,只有當事務結束時,才會更新數據庫,以便保證Hibernate的持久化對象和數據庫操作的同步性。
當持久化狀態對象變為托管狀態對象時,它將不在Hibernate持久層的管理范圍之內。
特征:
(1)要么是從數據庫中使用 get 或 load 方法查詢到的數據對象, 要么是 使用save 或 update 方法數據轉變成持久層對象
(2)對象 數據被 session 托管。換句話說 對象數據 在 session 緩存中有一份,在數據庫中有相應的記錄
當持久化對象的Session關閉之后,這個對象就從持久化狀態變為托管狀態。托管狀態的對象仍然在與數據庫中的數據關聯,但是他并不在Hibernate的Session管轄范圍之內。
如果將脫管狀態的對象重新關聯到某個新的Session上,它將變回持久化狀態對象。
特征:
(1)主要是通過 持久狀態對象,調用 session.evict() 或 session.clear() 或 session.close() 得到的,也可以new 一個設置 id 值的對象
(2)session 緩存中沒有,內存中有的對象(注: 該對象設置了 id 值)
調用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的狀態有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。