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

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Hibernate三態(tài),游離態(tài)

Hibernate三態(tài),游離態(tài)

Hibernate對(duì)象狀態(tài)
臨時(shí)(Transient) - 由new操作符創(chuàng)建,且尚未與Hibernate Session 關(guān)聯(lián)的對(duì)象被認(rèn)定為臨時(shí)(Transient)的。臨時(shí)(Transient)對(duì)象不會(huì)被持久化到數(shù)據(jù)庫(kù)中,也不會(huì)被賦予持久化標(biāo)識(shí)(identifier)。 如果臨時(shí)(Transient)對(duì)象在程序中沒(méi)有被引用,它會(huì)被垃圾回收器(garbage collector)銷毀。 使用Hibernate Session可以將其變?yōu)槌志?Persistent)狀態(tài)。(Hibernate會(huì)自動(dòng)執(zhí)行必要的SQL語(yǔ)句)

持久(Persistent) - 持久(Persistent)的實(shí)例在數(shù)據(jù)庫(kù)中有對(duì)應(yīng)的記錄,并擁有一個(gè)持久化標(biāo)識(shí)(identifier)。 持久(Persistent)的實(shí)例可能是剛被保存的,或剛被加載的,無(wú)論哪一種,按定義,它存在于相關(guān)聯(lián)的Session作用范圍內(nèi)。 Hibernate會(huì)檢測(cè)到處于持久(Persistent)狀態(tài)的對(duì)象的任何改動(dòng),在當(dāng)前操作單元(unit of work)執(zhí)行完畢時(shí)將對(duì)象數(shù)據(jù)(state)與數(shù)據(jù)庫(kù)同步(synchronize)。 開(kāi)發(fā)者不需要手動(dòng)執(zhí)行UPDATE。將對(duì)象從持久(Persistent)狀態(tài)變成瞬時(shí)(Transient)狀態(tài)同樣也不需要手動(dòng)執(zhí)行DELETE語(yǔ)句。

游離(Detached) - 與持久(Persistent)對(duì)象關(guān)聯(lián)的Session被關(guān)閉后,對(duì)象就變?yōu)橛坞x(Detached)的。 對(duì)游離(Detached)對(duì)象的引用依然有效,對(duì)象可繼續(xù)被修改。游離(Detached)對(duì)象如果重新關(guān)聯(lián)到某個(gè)新的Session上, 會(huì)再次轉(zhuǎn)變?yōu)槌志?Persistent)的(在Detached其間的改動(dòng)將被持久化到數(shù)據(jù)庫(kù))。 這個(gè)功能使得一種編程模型,即中間會(huì)給用戶思考時(shí)間(user think-time)的長(zhǎng)時(shí)間運(yùn)行的操作單元(unit of work)的編程模型成為可能。 我們稱之為應(yīng)用程序事務(wù),即從用戶觀點(diǎn)看是一個(gè)操作單元(unit of work)。

Hibernate中對(duì)象的游離狀態(tài)是指Session關(guān)閉之后,持久化對(duì)象變成離線對(duì)象,離線對(duì)象就不能同數(shù)據(jù)庫(kù)同步,也不再受Hibernate管理。操作 處于游離態(tài)對(duì)象 經(jīng)常會(huì)報(bào) session已關(guān)閉的錯(cuò)誤。

假設(shè)場(chǎng)景:
有兩個(gè)類, Team, Person. 映射關(guān)系是Team一對(duì)多Person, 采用lazy fetch策略。
session begin
Team t = *Dao.get()
session end
t.getPersons()// 出錯(cuò)
如果是用spring管理session的情況,事務(wù)外操作t.getPerons()也跟上面情況一樣。
這種情況在生產(chǎn)環(huán)境多表現(xiàn)為在jsp頁(yè)面操作 t對(duì)象時(shí)出錯(cuò)。

解決方法:
1. 取消lazy fetch策略
缺點(diǎn):會(huì)導(dǎo)致過(guò)多的數(shù)據(jù)庫(kù)訪問(wèn),因?yàn)槭且粚?duì)多的情況。
2. 在事務(wù)內(nèi)就先把關(guān)聯(lián)的對(duì)象取出
缺點(diǎn):會(huì)導(dǎo)致service層方法不統(tǒng)一,因?yàn)橐珠_(kāi)取出與不取出的情況。
3. 使用spring的 openSessionInview機(jī)制
缺點(diǎn): session打開(kāi)的時(shí)間比較長(zhǎng), 使用不好可能會(huì)導(dǎo)致out of memory

 

一個(gè)游離態(tài)的對(duì)象轉(zhuǎn)換為持久戰(zhàn)態(tài),有以下幾種方法:

1、session.saveOrUpdate(object)。這語(yǔ)句會(huì)把游離態(tài)的PO轉(zhuǎn)為持久態(tài)的PO并提交給數(shù)據(jù)庫(kù)

2、session.merge(object)。這語(yǔ)句會(huì)把游離態(tài)的PO轉(zhuǎn)為持久態(tài)的PO,并進(jìn)行合并操作。

3、session.lock(object, LockMode.NONE)。這語(yǔ)句只會(huì)把游離態(tài)的PO轉(zhuǎn)為持久態(tài)PO,不作其他操作。不過(guò),PO必須是沒(méi)有修改過(guò)的,這方法挺適合做一個(gè)應(yīng)用層

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Hibernate三種狀態(tài)的區(qū)分,以及save,update,saveOrUpd
Hibernate面試問(wèn)題
Hibernate持久化實(shí)現(xiàn) - TO BE THE BEST MAN---tenn - JavaEye技術(shù)網(wǎng)站
Hibernate中實(shí)體對(duì)象的生命周期
Hibernate 筆記3 關(guān)于SessionFactory,Session 以及 三大狀態(tài)(Transient、Persistent、Detached)
Hibernate 中的attachDirty,attachClean,merge之間的區(qū)別
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服