1. 程式人生 > >Hibernate -- 持久化物件的三種狀態

Hibernate -- 持久化物件的三種狀態

持久化物件三種狀態的概述

Hiberante 為了更好的來管理持久化類,特將持久化類分成了三種狀態。在 Hibernate 中持久化的物件可以劃分為三種狀態,分別是瞬時態、持久態和脫管態,一個持久化了的例項可能處於三種不同狀態中的某一種,三種狀態的詳細介紹如下。

  • transient 瞬時態
    瞬時態也稱為臨時態或自由態,瞬時態的例項是由 new 命令建立、開闢記憶體空間的物件,不存在持久化標識 OID(相當於主鍵值),尚未與 Hibernate Session 關聯,在資料庫中也沒有記錄,失去引用後將被 JVM 回收。瞬時狀態的物件在記憶體中是孤立存在的,與資料庫中的資料無任何關聯,僅是一個資訊攜帶的載體。
  • persistent 持久態
    持久態的物件存在持久化標識 OID,加入到了 Session 快取中,並且相關聯的 Session 沒有關閉,在資料庫中由對應的記錄,每條記錄只對應唯一的持久化物件,需要注意的是,持久態物件是在事務還未提交前變持久態的。
  • detached 脫管態
    脫管態也稱為離線態或遊離態,當某個持久化狀態的例項與 Session 的關聯被關閉時就變成了脫管態。脫管態物件存在持久化標識 OID,並且仍然與資料庫中的資料存在關聯,只是失去了與當前 Session 的關聯,脫管狀態物件發生改變時 Hibernate 不能檢測到。

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