隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827199
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜

          很多程序需要在某個事務中獲取對象,然后將對象發送到界面層去操作,最后在一個新的事務保存所做的修改。 在高并發訪問的環境中使用這種方式,通常使用附帶版本信息的數據來保證這些“長“工作單元之間的隔離。

          Hibernate通過提供使用Session.update()Session.merge()方法 重新關聯脫管實例的辦法來支持這種模型。

          // in the first session
          Cat cat = (Cat) firstSession.load(Cat.class, catId);
          Cat potentialMate = new Cat();
          firstSession.save(potentialMate);
          // in a higher layer of the application
          cat.setMate(potentialMate);
          // later, in a new session
          secondSession.update(cat);  // update cat
          secondSession.update(mate); // update mate

          如果具有catId持久化標識的Cat之前已經被另一Session(secondSession)裝載了, 應用程序進行重關聯操作(reattach)的時候會拋出一個異常。

          如果你確定當前session沒有包含與之具有相同持久化標識的持久實例,使用update()。 如果想隨時合并你的的改動而不考慮session的狀態,使用merge() 換句話說,在一個新session中通常第一個調用的是update()方法,以便保證重新關聯脫管(detached)對象的操作首先被執行。

          希望相關聯的脫管對象(通過引用“可到達”的脫管對象)的數據也要更新到數據庫時(并且也僅僅在這種情況), 應用程序需要對該相關聯的脫管對象單獨調用update() 當然這些可以自動完成,即通過使用傳播性持久化(transitive persistence),請看第 11.11 節 “傳播性持久化(transitive persistence)”。

          lock()方法也允許程序重新關聯某個對象到一個新session上。不過,該脫管(detached)的對象必須是沒有修改過的

          //just reassociate:
          sess.lock(fritz, LockMode.NONE);
          //do a version check, then reassociate:
          sess.lock(izi, LockMode.READ);
          //do a version check, using SELECT ... FOR UPDATE, then reassociate:
          sess.lock(pk, LockMode.UPGRADE);

          請注意,lock()可以搭配多種LockMode, 更多信息請閱讀API文檔以及關于事務處理(transaction handling)的章節。重新關聯不是lock()的唯一用途。

          其他用于長時間工作單元的模型會在第 12.3 節 “樂觀并發控制(Optimistic concurrency control)”中討論。

          文章出處:http://docs.huihoo.com/framework/hibernate/reference-v3_zh-cn/objectstate.html

          posted on 2007-10-29 16:15 Ke 閱讀(336) 評論(0)  編輯  收藏 所屬分類: hibernate
          主站蜘蛛池模板: 且末县| 阳城县| 山阳县| 织金县| 阿瓦提县| 察哈| 攀枝花市| 二手房| 枣庄市| 孝昌县| 汝南县| 小金县| 镇坪县| 都江堰市| 青铜峡市| 贵南县| 永宁县| 醴陵市| 汶川县| 南陵县| 五台县| 宁明县| 江西省| 军事| 襄城县| 达拉特旗| 体育| 资溪县| 香格里拉县| 沙田区| 长春市| 沙洋县| 凤翔县| 东丽区| 乌审旗| 山西省| 全椒县| 金寨县| 东阳市| 万全县| 安平县|