談談hibernate的三種狀態

下面大部份內容都是看書看到的,摘錄下來。 數據庫

hibernate的三種狀態: 緩存

transient objects: session

瞬時對象在內存孤立存在,它是攜帶信息的載體,不和數據庫的數據有任何關聯關係 性能

一、使用new操做符初始化的對象狀態是transient的 this

二、 Session的delete()方法把持久化對象轉變爲臨時對象 spa

瞬時對象的特徵。瞬時對象具備如下特徵:
(1) 不處於Session的緩存中,也能夠說,不被任何一個Session實例關聯。
(2) 在數據庫中沒有對應的記錄。 hibernate

persist objects: 對象

Session的許多方法都可以觸發Java對象進入持久化狀態:
(1) Session的save()方法把臨時對象轉變爲持久化對象。
(2) Session的load()或get()方法返回的對象老是處於持久化狀態。
(3) Session的find()方法返回的List集合中存放的都是持久化對象。
(4) Session的update()、saveOrUpdate()和lock()方法使遊離對象轉變爲持久化對象。
(5)當一個持久化對象關聯一個臨時對象,在容許級聯保存的狀況下,Session在清理緩存時會把這個臨時對象也轉變爲持久化對象。 生命週期

持久化對象的特徵。持久化對象具備如下特徵:
(1) 處於Session的緩存中。
(2) 在數據庫中有對應的記錄。 內存


臨時對象的特徵。臨時對象具備如下特徵:
(1) 不處於Session的緩存中,也能夠說,不被任何一個Session實例關聯。
(2) 在數據庫中沒有對應的記錄。臨時對象的特徵。臨時對象具備如下特徵:
(1) 不處於Session的緩存中,也能夠說,不被任何一個Session實例關聯。
(2) 在數據庫中沒有對應的記錄。

detached object:

當與某持久對象關聯的session被關閉後,該持久對象轉變爲脫管對象。當脫管對象被從新關聯到session上時,並再次轉變成持久對象。 

(1) 當調用Session的close()方法時,Session的緩存被清空,緩存中的全部持久化對象都變爲遊離對象。若是在應用程序中沒有引用變量引用這些遊離對象,它們就會結束生命週期。
(2)Session的evict()方法可以從緩存中刪除一個持久化對象,使它變爲遊離狀態。

Session的clean()方法從緩存中清除全部的持久化對象。

當Session的緩存中保存了大量的持久化對象,會消耗許多內存空間,爲了提升性能,能夠考慮調用evict()方法,從緩存中刪除一些持久化對象。

遊離對象的特徵。遊離對象具備如下特徵:
(1) 不處於Session的緩存中。遊離對象不被Session關聯
(2) 在數據庫中有對應的記錄。

 

注意當使用hibernate的save\update\delete的時候,是使對象的狀態發生了改變。

一個已經持久化的對象,若是須要修改它的屬性,只須要

Tboa800.setXXX("屬性");

不須要this.getHibernate.update(Tboa800);

固然前提是你的方法都處在Spring的聲明式事物管理下。

相關文章
相關標籤/搜索