免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
(轉(zhuǎn)) Hibernate對象的三種狀態(tài)

在Hibernate中,對象有三種狀態(tài):臨 時狀態(tài)(Transient)、持久狀態(tài)(Persistent)和游離狀態(tài)(Detached)。

處于持久態(tài)的對象也稱為 PO(PersistenceObject),臨時對象和游離對象也稱為VO(ValueObject). 
1. 臨時狀態(tài) 
由 new命令開辟內(nèi)存空間的java對象,例如:

User user=new User();

 時對象在內(nèi)存孤立存在,它是攜帶信息的載體,不和數(shù)據(jù)庫的數(shù)據(jù)有任何關(guān)聯(lián)關(guān)系.

(a) 如 果沒有變量對該對象進行引用,它將被gc回收;

(b) 在Hibernate中,可通過 session的save()或saveOrUpdate()方法將瞬時對象與數(shù)據(jù)庫相關(guān)聯(lián),并將數(shù)據(jù)對應(yīng)的插入數(shù)據(jù)庫中,此時該臨時對象轉(zhuǎn)變成持久化對 象.

2. 持久狀態(tài) 
處于該狀態(tài)的對象在數(shù)據(jù)庫中具有對應(yīng)的記錄,并擁有一個持久化標識.通過session的get()、load() 等方法獲得的對象都是持久對象。

持久化對象被修改變更后,不會馬上同步到數(shù)據(jù)庫,直到數(shù)據(jù)庫事務(wù)提交。在同步之前,持久化 對象是臟的(Dirty)。

(a) 如果是用hibernate的delete()方法,對應(yīng)的持久對象就變成臨時對象,因數(shù)據(jù)庫中 的對應(yīng)數(shù)據(jù)已被刪除,該對象不再與數(shù)據(jù)庫的記錄關(guān)聯(lián).

(b) 當一個session執(zhí)行close()或 clear()、evict()之后,持久對象變成游離對象,此時該對象雖然具有數(shù)據(jù)庫識別值,但它已不在HIbernate持久層的管理之下.

持久對象具有如下特點:

(1)和session實例關(guān)聯(lián);

(2)在數(shù)據(jù)庫中有與之關(guān)聯(lián)的記錄,并 擁有持久化標識.

3. 游離狀態(tài)
當與某持久對象關(guān)聯(lián)的session被關(guān)閉后,該持久對象轉(zhuǎn)變?yōu)橛坞x對象.當游離對象被重新關(guān)聯(lián)到session上 時,又再次轉(zhuǎn)變成持久對象(在Detached其間的改動將被持久化到數(shù)據(jù)庫中)。
 游離對象擁有數(shù)據(jù)庫的識別值,但已不在持久化管理范圍之內(nèi)。

(a) 通 過update()、saveOrUpdate()等方法,游離對象可轉(zhuǎn)變成持久對象.

(b) 如果是用hibernate的delete()方法,對應(yīng)的游離對象就變成臨時對象,因數(shù)據(jù)庫中的 對應(yīng)數(shù)據(jù)已被刪除,該對象不再與數(shù)據(jù)庫的記錄關(guān)聯(lián).

(c) 在沒有任何變量引用它時,它將被gc在適當?shù)?時候回收;

游離對象具有如下特點:

(1)本質(zhì)上與瞬時對象相同,在沒有任何變量引用它時,JVM會在適當?shù)臅r候?qū)⑺厥?

(2)比瞬時對象多了一個數(shù)據(jù)庫記錄標識值.

示例:

Session session=factory.openSession();
User user=new User(); 
//user對象處于臨時狀態(tài)。
user.setName("張三");
user.setAge(18);
Transaction tran=Session.beginTransaction();
session.save(user);
//user對象轉(zhuǎn)化為持 久狀態(tài)。
tran.commit(); 
session.close();
//user對象轉(zhuǎn)化為游離狀態(tài)。
user.setName(" 李四"); 
Session session2=factory.openSession();
Transaction tran2=Session2.beginTransaction();
Session2.update(user);
//user對象 轉(zhuǎn)化為持久狀態(tài)。
tran2.commit();(游離狀態(tài)中對象的變動在再次持久時會被持久化到數(shù)據(jù)庫) 
Transaction tran3=Session.beginTransaction();
Session2.delete(user);
//user對象轉(zhuǎn) 化為臨時狀態(tài)。
tran3.commit();
session2.close();

Session的不同操作對對象狀態(tài)的影響:
Session 的save()方法
save()方法將一個臨時對象轉(zhuǎn)變?yōu)槌志脤ο蟆?br>Session的update()方法
update()方法 將一個游離對象轉(zhuǎn)變?yōu)槌志脤ο蟆?br>Session的lock()方法
調(diào)用lock()方法將對象同Session相關(guān)聯(lián)而不強制更新。
Session 的merge()方法
拷貝指定對象的狀態(tài)到具有相同對象標識符的持久對象。
Session的saveOrUpdate()方法
saveOrUpdate() 方法對于臨時對象,執(zhí)行save()方法,對于游離對象,執(zhí)行update()方法。

Session的load()和get()方法
load() 方法和get()方法都可以根據(jù)對象的標識符加載對象,這兩個方法加載的對象都位于Session的緩存中,屬于持久對象。
Session的 delete()方法
delete()方法用于從數(shù)據(jù)庫中刪除與持久化對象對應(yīng)的記錄。如果傳入的是一個持久化對象,Session就執(zhí)行一條 delete語句。如果傳入的參數(shù)是游離對象,先使分離對象與Session關(guān)聯(lián),使它變?yōu)槌志没瘜ο螅缓蟛庞媱潏?zhí)行一個delete語句。
Session 的evict()方法
evict()方法從Session的緩存中刪除一個持久對象。

在Hibernate中,對象有三種狀態(tài):臨 時狀態(tài)(Transient)、持久狀態(tài)(Persistent)和游離狀態(tài)(Detached)。

處于持久態(tài)的對象也稱為 PO(PersistenceObject),臨時對象和游離對象也稱為VO(ValueObject). 
1. 臨時狀態(tài) 
由 new命令開辟內(nèi)存空間的java對象,例如:

User user=new User();

 時對象在內(nèi)存孤立存在,它是攜帶信息的載體,不和數(shù)據(jù)庫的數(shù)據(jù)有任何關(guān)聯(lián)關(guān)系.

(a) 如 果沒有變量對該對象進行引用,它將被gc回收;

(b) 在Hibernate中,可通過 session的save()或saveOrUpdate()方法將瞬時對象與數(shù)據(jù)庫相關(guān)聯(lián),并將數(shù)據(jù)對應(yīng)的插入數(shù)據(jù)庫中,此時該臨時對象轉(zhuǎn)變成持久化對 象.

2. 持久狀態(tài) 
處于該狀態(tài)的對象在數(shù)據(jù)庫中具有對應(yīng)的記錄,并擁有一個持久化標識.通過session的get()、load() 等方法獲得的對象都是持久對象。

持久化對象被修改變更后,不會馬上同步到數(shù)據(jù)庫,直到數(shù)據(jù)庫事務(wù)提交。在同步之前,持久化 對象是臟的(Dirty)。

(a) 如果是用hibernate的delete()方法,對應(yīng)的持久對象就變成臨時對象,因數(shù)據(jù)庫中 的對應(yīng)數(shù)據(jù)已被刪除,該對象不再與數(shù)據(jù)庫的記錄關(guān)聯(lián).

(b) 當一個session執(zhí)行close()或 clear()、evict()之后,持久對象變成游離對象,此時該對象雖然具有數(shù)據(jù)庫識別值,但它已不在HIbernate持久層的管理之下.

持久對象具有如下特點:

(1)和session實例關(guān)聯(lián);

(2)在數(shù)據(jù)庫中有與之關(guān)聯(lián)的記錄,并 擁有持久化標識.

3. 游離狀態(tài)
當與某持久對象關(guān)聯(lián)的session被關(guān)閉后,該持久對象轉(zhuǎn)變?yōu)橛坞x對象.當游離對象被重新關(guān)聯(lián)到session上 時,又再次轉(zhuǎn)變成持久對象(在Detached其間的改動將被持久化到數(shù)據(jù)庫中)。
 游離對象擁有數(shù)據(jù)庫的識別值,但已不在持久化管理范圍之內(nèi)。

(a) 通 過update()、saveOrUpdate()等方法,游離對象可轉(zhuǎn)變成持久對象.

(b) 如果是用hibernate的delete()方法,對應(yīng)的游離對象就變成臨時對象,因數(shù)據(jù)庫中的 對應(yīng)數(shù)據(jù)已被刪除,該對象不再與數(shù)據(jù)庫的記錄關(guān)聯(lián).

(c) 在沒有任何變量引用它時,它將被gc在適當?shù)?時候回收;

游離對象具有如下特點:

(1)本質(zhì)上與瞬時對象相同,在沒有任何變量引用它時,JVM會在適當?shù)臅r候?qū)⑺厥?

(2)比瞬時對象多了一個數(shù)據(jù)庫記錄標識值.

示例:

Session session=factory.openSession();
User user=new User(); 
//user對象處于臨時狀態(tài)。
user.setName("張三");
user.setAge(18);
Transaction tran=Session.beginTransaction();
session.save(user);
//user對象轉(zhuǎn)化為持 久狀態(tài)。
tran.commit(); 
session.close();
//user對象轉(zhuǎn)化為游離狀態(tài)。
user.setName(" 李四"); 
Session session2=factory.openSession();
Transaction tran2=Session2.beginTransaction();
Session2.update(user);
//user對象 轉(zhuǎn)化為持久狀態(tài)。
tran2.commit();(游離狀態(tài)中對象的變動在再次持久時會被持久化到數(shù)據(jù)庫) 
Transaction tran3=Session.beginTransaction();
Session2.delete(user);
//user對象轉(zhuǎn) 化為臨時狀態(tài)。
tran3.commit();
session2.close();

Session的不同操作對對象狀態(tài)的影響:
Session 的save()方法
save()方法將一個臨時對象轉(zhuǎn)變?yōu)槌志脤ο蟆?br>Session的update()方法
update()方法 將一個游離對象轉(zhuǎn)變?yōu)槌志脤ο蟆?br>Session的lock()方法
調(diào)用lock()方法將對象同Session相關(guān)聯(lián)而不強制更新。
Session 的merge()方法
拷貝指定對象的狀態(tài)到具有相同對象標識符的持久對象。
Session的saveOrUpdate()方法
saveOrUpdate() 方法對于臨時對象,執(zhí)行save()方法,對于游離對象,執(zhí)行update()方法。

Session的load()和get()方法
load() 方法和get()方法都可以根據(jù)對象的標識符加載對象,這兩個方法加載的對象都位于Session的緩存中,屬于持久對象。
Session的 delete()方法
delete()方法用于從數(shù)據(jù)庫中刪除與持久化對象對應(yīng)的記錄。如果傳入的是一個持久化對象,Session就執(zhí)行一條 delete語句。如果傳入的參數(shù)是游離對象,先使分離對象與Session關(guān)聯(lián),使它變?yōu)槌志没瘜ο?,然后才計劃?zhí)行一個delete語句。
Session 的evict()方法
evict()方法從Session的緩存中刪除一個持久對象。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
在Hibernate應(yīng)用中Java對象的狀態(tài)
Hibernate的工作原理
hibernate實體對象的三種狀態(tài):自由狀態(tài),持久狀態(tài),游離狀態(tài).
簡單理解Hibernate三種狀態(tài)的概念及互相轉(zhuǎn)化
hibernate 三種狀態(tài)深入分析
Hibernate持久化對象的生命周期
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服