日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Hibernate擴(kuò)展周期的Session和自動(dòng)版本化

今天我們主要介紹擴(kuò)展周期的Hibernate session和自動(dòng)版本化,望讀者能夠加以借鑒。

單個(gè)Hibernate Session實(shí)例和它所關(guān)聯(lián)的所有持久化對(duì)象實(shí)例都被用于整個(gè)對(duì)話(huà),這被稱(chēng)為session-per-conversation。Hibernate在同步的時(shí)候進(jìn)行對(duì)象實(shí)例的版本檢查,如果檢測(cè)到并發(fā)修 改則拋出異常。由開(kāi)發(fā)人員來(lái)決定是否需要捕獲和處理這個(gè)異常(通常的抉擇是給用戶(hù) 提供一個(gè)合并更改,或者在無(wú)臟數(shù)據(jù)情況下重新進(jìn)行業(yè)務(wù)對(duì)話(huà)的機(jī)會(huì))。

在等待用戶(hù)交互的時(shí)候,Hibernate Session 斷開(kāi)底層的JDBC連接。這種方式 以數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)的角度來(lái)說(shuō)是***效的方式。應(yīng)用程序不需要關(guān)心版本檢查或脫管對(duì)象實(shí)例 的重新關(guān)聯(lián),在每個(gè)數(shù)據(jù)庫(kù)事務(wù)中,應(yīng)用程序也不需要載入讀取對(duì)象實(shí)例。

 
 
 
  1. // foo is an instance loaded earlier by the old session  
  2. Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction  
  3.  
  4. foo.setProperty("bar");  
  5.  
  6. session.flush();    // Only for last transaction in conversation  
  7. t.commit();         // Also return JDBC connection  
  8. session.close();    // Only for last transaction in conversation 

foo對(duì)象知道它是在哪個(gè)Session中被裝入的。在一個(gè)舊session中開(kāi)啟一個(gè)新的數(shù)據(jù)庫(kù)事務(wù),會(huì)導(dǎo)致session獲取一個(gè)新的連接,并恢復(fù)session的功能。

將數(shù)據(jù)庫(kù)事務(wù)提交,使得session從JDBC連接斷開(kāi),并將此連接交還給連接池。在重新連接之后,要強(qiáng)制對(duì)你沒(méi)有更新的數(shù)據(jù)進(jìn)行一次版本檢查,你可以對(duì)所有可能被其他事務(wù)修改過(guò)的對(duì)象,使用參數(shù)LockMode.READ來(lái)調(diào)用Session.lock()。你不用lock任何你正在更新的數(shù)據(jù)。

一般你會(huì)在擴(kuò)展的Session上設(shè)置FlushMode.NEVER,因此只有***一個(gè)數(shù)據(jù)庫(kù)事務(wù)循環(huán)才會(huì)真正的吧整個(gè)對(duì)話(huà)中發(fā)生的修改發(fā)送到數(shù)據(jù)庫(kù)。因此,只有這***一次數(shù)據(jù)庫(kù)事務(wù)才會(huì)包含flush()操作,然后在整個(gè)對(duì)話(huà)結(jié)束后,還要close()這個(gè)session。

如果在用戶(hù)思考的過(guò)程中,Session因?yàn)樘罅硕荒鼙4?,那么這種模式是有 問(wèn)題的。舉例來(lái)說(shuō),一個(gè)HttpSession應(yīng)該盡可能的小。

由于 Session是一級(jí)緩存,并且保持了所有被載入過(guò)的對(duì)象,因此 我們只應(yīng)該在那些少量的request/response情況下使用這種策略。你應(yīng)該只把一個(gè)Session用于單個(gè)對(duì)話(huà),因?yàn)樗芸炀蜁?huì)出現(xiàn)臟數(shù)據(jù)。

注意

早期的Hibernate版本需要明確的對(duì)Session進(jìn)行disconnec和reconnect。這些方法現(xiàn)在已經(jīng)過(guò)時(shí)了,打開(kāi)事務(wù)和關(guān)閉事務(wù)會(huì)起到同樣的效果。

此外,也請(qǐng)注意,你應(yīng)該讓與數(shù)據(jù)庫(kù)連接斷開(kāi)的Session對(duì)持久層保持 關(guān)閉狀態(tài)。換句話(huà)說(shuō),在三層環(huán)境中,使用有狀態(tài)的EJB session bean來(lái)持有Session, 而不要把它傳遞到web層(甚至把它序列化到一個(gè)單獨(dú)的層),保存在HttpSession中。

擴(kuò)展session模式,或者被稱(chēng)為每次對(duì)話(huà)一個(gè)session(session-per-conversation), 在與自動(dòng)管理當(dāng)前session上下文聯(lián)用的時(shí)候會(huì)更困難。你需要提供你自己的CurrentSessionContext實(shí)現(xiàn)。請(qǐng)參閱Hibernate Wiki以獲得示例。


網(wǎng)站欄目:Hibernate擴(kuò)展周期的Session和自動(dòng)版本化
文章位置:http://www.5511xx.com/article/djpihod.html