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

打開APP
userphoto
未登錄

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

開通VIP
Hibernate的evict方法和clear方法的區(qū)別
摘自百度知道:http://zhidao.baidu.com/question/63663640.html

問:
先創(chuàng)建一個Student,然后調(diào)用session.save方法,然后再調(diào)用evict方法把Student對象清除出緩存,再提交事務(wù),
可是會報錯:Exception in thread "main" org.hibernate.AssertionFailure: possible nonthreadsafe access to session
但是如果我用的不是evict方法,而是clear方法用來清除緩存的話,程序沒有錯。

答:
session.evict(obj),會把指定的緩沖對象進(jìn)行清除
session.clear(),把緩沖區(qū)內(nèi)的全部對象清除,但不包括操作中的對象

所以,hibernate執(zhí)行的順序如下,

(1)生成一個事務(wù)的對象,并標(biāo)記當(dāng)前的Session處于事務(wù)狀態(tài)(注:此時并未啟動數(shù)據(jù)庫級事務(wù))。
(2)應(yīng)用使用s.save保存對象,這個時候Session將這個對象放入entityEntries,用來標(biāo)記對象已經(jīng)
和當(dāng)前的會話建立了關(guān)聯(lián),由于應(yīng)用對對象做了保存的操作,Session還要在insertions中登記應(yīng)用
的這個插入行為(行為包括:對象引用、對象id、Session、持久化處理類)。

(3)s.evict將對象從s會話中拆離,這時s會從entityEntries中將這個對象移出。
(4)事務(wù)提交,需要將所有緩存flush入數(shù)據(jù)庫,Session啟動一個事務(wù),并按照insert,update,……,
delete的順序提交所有之前登記的操作(注意:所有insert執(zhí)行完畢后才會執(zhí)行update,這里的特殊
處理也可能會將你的程序搞得一團(tuán)糟,如需要控制操作的執(zhí)行順序,要善于使用flush),現(xiàn)在對象不
在entityEntries中,但在執(zhí)行insert的行為時只需要訪問insertions就足夠了,所以此時不會有任何
的異常。異常出現(xiàn)在插入后通知Session該對象已經(jīng)插入完畢這個步驟上,這個步驟中需要將entityEntries
中對象的existsInDatabase標(biāo)志置為true,由于對象并不存在于entityEntries中,此時Hibernate就
認(rèn)為insertions和entityEntries可能因為線程安全的問題產(chǎn)生了不同步(也不知道Hibernate的開發(fā)者
是否考慮到例子中的處理方式,如果沒有的話,這也許算是一個bug吧),于是一個net.sf.hibernate.AssertionFailure
就被拋出,程序終止


一般錯誤的認(rèn)為s.save會立即的執(zhí)行,而將對象過早的與Session拆離,造成了Session的insertions
和entityEntries中內(nèi)容的不同步。所以我們在做此類操作時一定要清楚Hibernate什么時候會將數(shù)據(jù)
flush入數(shù)據(jù)庫,在未flush之前不要將已進(jìn)行操作的對象從Session上拆離。

解決辦法是在save之后,添加session.flush。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Hibernate的clear(),flush(),evict()方法詳解
Hibernate中清除緩存對象方法
Hibernate緩存何時使用和如何使用
(轉(zhuǎn)) Hibernate對象的三種狀態(tài)
Hibernate的session.flush做了什么呢?
Session.Clear() Session.Abandon()
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服