成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Hibernate擴(kuò)展周期的Session和自動(dòng)版本化

開發(fā) 后端
單個(gè)Hibernate Session實(shí)例和它所關(guān)聯(lián)的所有持久化對象實(shí)例都被用于整個(gè)對話,這被稱為session-per-conversation。Hibernate在同步的時(shí)候進(jìn)行對象實(shí)例的版本檢查,如果檢測到并發(fā)修 改則拋出異常。

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

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

在等待用戶交互的時(shí)候,Hibernate Session 斷開底層的JDBC連接。這種方式 以數(shù)據(jù)庫訪問的角度來說是***效的方式。應(yīng)用程序不需要關(guān)心版本檢查或脫管對象實(shí)例 的重新關(guān)聯(lián),在每個(gè)數(shù)據(jù)庫事務(wù)中,應(yīng)用程序也不需要載入讀取對象實(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對象知道它是在哪個(gè)Session中被裝入的。在一個(gè)舊session中開啟一個(gè)新的數(shù)據(jù)庫事務(wù),會(huì)導(dǎo)致session獲取一個(gè)新的連接,并恢復(fù)session的功能。

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

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

如果在用戶思考的過程中,Session因?yàn)樘罅硕荒鼙4妫敲催@種模式是有 問題的。舉例來說,一個(gè)HttpSession應(yīng)該盡可能的小。

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

注意

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

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

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

【編輯推薦】

  1. Hibernate使用批量抓取技巧
  2. Hibernate操作延遲加載的關(guān)聯(lián)
  3. 深入了解Hibernate自動(dòng)狀態(tài)檢測
  4. Hibernate的類型分類
  5. Hinerbate單端關(guān)聯(lián)代理頗析
責(zé)任編輯:仲衡 來源: 博客園
相關(guān)推薦

2009-06-26 10:01:00

Hibernate的查

2009-09-29 16:04:29

Hibernate S

2009-09-24 17:24:20

Hibernate S

2009-06-26 16:34:50

delete()方法Hibernate S

2009-06-26 16:33:09

saveOrUpdatHibernate

2009-09-23 17:18:16

Hibernate S

2009-09-25 13:51:13

Hibernate S

2009-09-25 09:46:03

Hibernate s

2009-09-25 10:53:40

Hibernate S

2009-09-22 10:09:21

Hibernate S

2009-09-23 17:03:08

Hibernate S

2009-06-17 15:06:50

Hibernate實(shí)體

2009-06-12 16:00:13

Session方法Hibernate

2012-02-09 13:31:03

HibernateJava

2009-09-24 10:13:05

Hibernate版本

2009-09-25 16:29:32

Hibernate一級

2009-09-27 14:53:38

Hibernate S

2009-09-24 16:13:05

Hibernate S

2009-06-18 13:42:48

Hibernate s

2023-05-23 16:51:21

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧一区二区 | 奇米久久久 | 一级一片在线观看 | 久久久久久毛片免费观看 | 国产激情偷乱视频一区二区三区 | 成人av看片| 国产99久久精品一区二区永久免费 | 欧美成人精品一区二区男人看 | 国产九九av| 日本三级网址 | 国产精品成人一区二区三区 | 人人爽日日躁夜夜躁尤物 | 羞羞视频一区二区 | 免费看淫片 | 欧美日韩国产精品激情在线播放 | 国产乱码一二三区精品 | 日日噜噜噜夜夜爽爽狠狠视频97 | 久国产视频 | 91精品国产91久久久久久吃药 | 日韩精品1区2区3区 爱爱综合网 | 韩国理论电影在线 | 欧美视频在线播放 | 国产精品久久久久9999鸭 | 青青草免费在线视频 | 911精品美国片911久久久 | 久久久一区二区三区 | 欧美日韩高清一区二区三区 | 91在线中文字幕 | 久久久久国产精品一区二区 | 国产成人小视频 | 亚洲影音先锋 | 国产原创视频 | 嫩草视频免费 | 日韩精品免费一区 | 91精品国产综合久久婷婷香蕉 | 久久精品国产一区二区电影 | 日韩精品在线播放 | 久久综合入口 | 国产精品久久久久久久久久妞妞 | 精品美女久久久久久免费 | 日韩中文字幕在线免费 |