Hibernate -- 持久化物件的三種狀態
持久化物件三種狀態的概述
Hiberante 為了更好的來管理持久化類,特將持久化類分成了三種狀態。在 Hibernate 中持久化的物件可以劃分為三種狀態,分別是瞬時態、持久態和脫管態,一個持久化了的例項可能處於三種不同狀態中的某一種,三種狀態的詳細介紹如下。
- transient 瞬時態
瞬時態也稱為臨時態或自由態,瞬時態的例項是由 new 命令建立、開闢記憶體空間的物件,不存在持久化標識 OID(相當於主鍵值),尚未與 Hibernate Session 關聯,在資料庫中也沒有記錄,失去引用後將被 JVM 回收。瞬時狀態的物件在記憶體中是孤立存在的,與資料庫中的資料無任何關聯,僅是一個資訊攜帶的載體。 - persistent 持久態
持久態的物件存在持久化標識 OID,加入到了 Session 快取中,並且相關聯的 Session 沒有關閉,在資料庫中由對應的記錄,每條記錄只對應唯一的持久化物件,需要注意的是,持久態物件是在事務還未提交前變持久態的。 - detached 脫管態
脫管態也稱為離線態或遊離態,當某個持久化狀態的例項與 Session 的關聯被關閉時就變成了脫管態。脫管態物件存在持久化標識 OID,並且仍然與資料庫中的資料存在關聯,只是失去了與當前 Session 的關聯,脫管狀態物件發生改變時 Hibernate 不能檢測到。
Hibernate 持久化物件的三種狀態轉換
當一個物件被執行 new 關鍵字建立後,該物件處於瞬時態;當對瞬時態物件執行Session#save()
或Session#saveOrUpdate()
方法後,該物件被放入Session
的一級快取,物件進入持久態;當對持久態物件執行evict()
、close()
或clear()
操作後,物件進入脫管態;當直接執行Session#get()
、Session#load()
、Session#find()
或Session#iterate()
等方法從資料庫裡查詢物件時,查詢到的物件也處於持久態;當對資料庫中的記錄進行Session#update()
、Session#saveOrUpdate()
以及Session#lock()
Session
的管理範圍,所以會再一段時間後被 JVM 回收。 持久化物件的三種狀態可以通過呼叫
Session
中的一系列方法實現狀態間的轉換,具體如下:
瞬時態轉換到其他狀態
瞬時態看的物件由 new 關鍵字建立,瞬時態物件轉換到其他狀態總結如下:
- 瞬時態轉換為持久態:執行
Session#save()
或Session#saveOrUpdate()
方法。 - 瞬時態轉換為脫管態:為瞬時態物件設定持久化標識 OID。
持久態物件轉換到其他狀態
持久化物件額可以直接通過 Hibernate 中Session#get()
、Session#load()
方法,或者 Query 查詢從資料庫中獲得,持久態物件轉換到其他狀態總結如下:
- 持久態轉換為瞬時態:執行
Session#delete()
方法,需要注意的是被刪除的持久話物件,不建議再次使用。 - 持久態轉化為脫管態:執行
Session#evict()
、Session#close()
或Session#clear()
方法。Session#evict()
方法用於清楚一級快取中某一個物件;Session#close()
方法用於關閉 Session,清楚一級快取;Session#clear()
方法用於清楚一級快取的所有物件。
脫管態物件轉換到其他狀態
脫管態物件無法直接獲得,是由其他狀態物件轉換而來的,脫管態物件轉換到其他狀態總結如下:
- 脫管態轉換為持久態:執行
Session#update()
、Session#saveOrUpdate()
或Session#lock()
方法。 - 脫管態轉換為瞬時態:將脫管態物件的持久話標誌 OID 設定為 null;
脫管態轉換到瞬時態跟瞬時態轉換到脫管態的情況相似,脫管態和瞬時態的區別就是 OID 有沒有值,所以可以通過脫管態物件的 OID 設定為 null,使其程式設計瞬時態物件。例如在Session#close()
操作後,加入程式碼customer.setCust_id(null);
,customer 物件將由脫管態轉換為瞬時態。
相關推薦
持久化物件三種狀態之間的轉換
1.Hibernate持久化物件的三種狀態總結: 1.瞬態:使用new剛建立的並且還未與Hibernate Session關聯的物件此時處於瞬態。瞬態物件還不會與資料庫之間進行關聯 2.持久化:持久化例項在資料庫中有對應的記錄,持久化例項可以
Hibernate-----物件三種狀態
瞬時態(臨時態):transient,session沒有快取物件,資料庫也沒有對應記錄。 &nb
Hibernate物件三種狀態詳細分析(轉自http://blog.csdn.net/redarmy_chen/article/details/7069482)
在hibernate中有三種狀態:瞬時態(Transient)、 持久態(Persistent)、脫管態(Detached)。處於持久態的物件也稱為PO(Persistence Object),瞬時物件和脫管物件也稱為VO(Value Object)。通過自己在網上的搜尋,
深入淺出Hibernate中的三種狀態
學過hibernate的人都可能都知道hibernate有三種狀態,transient(瞬時狀態),persistent(持久化狀態)以及detached(離線狀態),大傢伙也許也知道這三者之間的區別,比如瞬時狀態就是剛new出來一個物件,還沒有被儲存
jpa持久化物件四種狀態
自己理解,不完全正確,大致如下: 例:某實體類 Person(int id,string name,int age); id 為主鍵。 新建:new Person(), 並且未給 id 賦值; 遊離:new Person(), 並且給
hibernate資料的三種狀態
Hibernate 資料持久化的三種狀態: 一、 瞬時物件(Transient Object): 使用new操作符初始化的物件不是立刻就持久的。它們的狀態是瞬時的,也就是說它們沒有任何跟資料庫表相關聯的行為,只要應用不再引用這些物件(不再被任何其它物件所引用),它們
Hibernate中持久化物件的三種狀態簡述
持久化物件的三種狀態簡述 在Hibernate中持久化類的物件可以劃分為三種狀態,分別是: 瞬態,持久態,脫管態。 一、瞬時狀態(Transient) 瞬時物件特點: (1) 不和 Session 例項關聯 (2) 在資料庫中沒有和瞬時物件關聯的記錄 通過
Hibernate -- 持久化物件的三種狀態
持久化物件三種狀態的概述 Hiberante 為了更好的來管理持久化類,特將持久化類分成了三種狀態。在 Hibernate 中持久化的物件可以劃分為三種狀態,分別是瞬時態、持久態和脫管態,一個持久化了的例項可能處於三種不同狀態中的某一種,三種狀態的詳細介紹如下
Hibernate持久化物件的三種狀態
新new出來的物件如Student stu = new Student(),就是瞬時物件,它在記憶體中孤立存在,它的意義是攜帶資訊的載體,不和資料庫的資料有任何關聯。通過Session的save()或saveOrUpdate()方法可以把一個瞬時物件與資料庫相關聯,並把瞬時物件攜帶的資訊通過配置檔案所做的對映
物件的三種狀態(hibernate管理的物件)
臨時狀態 當物件被new出來的時候就是臨時狀態 持久狀態 hibernate通過管理物件來操作資料庫,這裡物件指的是持久態的物件 程式碼: // 測試 //呼叫自己寫的方法獲取到session Session session
分享知識-快樂自己:Hibernate物件的三種狀態
圖解: 1):瞬時狀態(Transient) 物件與session沒有關聯,資料庫中沒有對應的資料。 一般new出來的物件便是瞬時物件。 對瞬時物件使用save()方法便使之成為持久物件。 由於資料庫中沒有對應的資料,所以對瞬時物件使用update()方法無效。
Hibernate中物件的三種狀態及相互轉化
1. 瞬時狀態 (Transient) 當我們通過Java的new關鍵字來生成一個實體物件時,這時這個實體物件就處於自由狀態,如下: Customer customer=new Customer(“zx”,27,images); 這時cus
hibernate筆記之闡述實體物件的三種狀態以及轉換關係
瞬時態:當new一個實體物件後,這個物件處於瞬時態,即這個物件只是一個儲存臨時資料的記憶體區域,如果沒有變數引用這個物件,則會被JVM的垃圾回收機制回收。這個物件所儲存的資料與資料庫沒有任何關係,除非通過Session的save()、saveOrUpdate()、persist()、
hibernate 物件的三種狀態
一、 物件的三種狀態(hibernate管理的物件) 1. 臨時狀態 物件的臨時狀態,形容也就是這個
國慶七篇-----Hibernate持久化類的三種狀態(三)
一、三種狀態 1、瞬時態(transient) 瞬時態物件沒有唯一標識OID.沒有納入Session的管理. 2、持久態(persistent) 持久化物件有唯一標識OID.已經納入到Session的管理,持久態物件有自動更新資料庫的能力. 3、脫
Hibernate中物件的三種狀態,以及三種狀態間的轉化方法
在Hibernate中有三種狀態,對它的深入理解,才能更好的理解hibernate的執行機理,剛開始不太注意這些概念,後來被別人問到了,說是面試題,才發現它是重要的。對於需要持久化的JAVA物件,在它的生命週期中有三種狀態,而且互相轉化。 Hibernate三種狀態之一
Hibernate學習筆記(四)----核心開發介面、物件的三種狀態、session常用方法
a) AnnotationConfiguration b) 進行配置資訊的管理 c) 用來產生SessionFactory d) 可以在configure方法中指定hibernate配置檔案 e) 只關注一個方
hibernate&三種狀態的物件&一級快取&快照機制
持久化類概述1. Hibernate的持久化類持久化類:Java類與資料庫的某個表建立了對映關係.這個類就稱為是持久化類.持久化類 = Java類 + hbm的配置檔案持久化物件的三種狀態Hibernate的持久化類的狀態Hibernate為了管理持久化類:將持久化類分成了三
hibernate中物件的三種狀態:瞬時態、脫管態、持久態
物件的三種狀態: 瞬時態:也叫臨時態,與session沒有關聯,沒有id,在資料庫中沒有記錄 脫管態:也叫遊離態,與session沒有關聯,但在資料庫中有對應的id,有這條記錄 持
hibernate物件的三種狀態、一級快取、載入策略
一、hibernate管理物件的三種狀態: 1、臨時狀態 2、持久狀態 3、遊離狀態 1、hibernate是通過管理物件來操作資料,這裡物件指的是持久化物件。 2、hibernate中的三種狀態的物件是可以相互轉換的,通常編碼時只關注持久 化物件。關注get