Hibernate持久化的實現 鎖

2021-08-30 05:38:52 字數 1010 閱讀 1656

(1),悲觀鎖---依靠資料庫層提供的鎖機制。

string hqlstr = "from tuser as user where user.name='erica'"; 

query query = session.createquery(hqlstr);

query.setlockmode("user",lockmode.upgrade);//加鎖(for update)

list userlist = query.list();//執行查詢,獲取資料

query.setlockmode對查詢語句中,特定別名(user)所對應的記錄進行加鎖。

hibernate的加鎖模式(hibernate內部使用)有:

lockmode.none:無鎖機制

lockmode.write:hibernate在insert和update記錄的時候會自動獲取。

lockmode.read:hibernate在讀取記錄的時候會自動獲取。

依賴資料庫的悲觀鎖機制(應用層):

lockmode.upgrade:利用資料庫的for update子句加鎖。

lockmode.upgrade_nowait:oracle的特定實現,利用oracle的for update nowait子句實現加鎖。

注意:應該查詢開始之前設定加鎖。

(2),樂觀鎖

---大多是基於資料版本記錄機制實現。

資料版本:即為資料增加乙個版本標識,在基於資料庫表的版本解決方案中,一般是通過為資料庫表增加乙個「version」欄位來實現。

樂觀鎖策略:提交版本必須大於記錄當前版本才能執行更新。

新增乙個version屬性描述符

注意:version節點必須出現在id節點之後。

違反樂觀鎖策略時:tx.commit()處丟擲staleobjectstateexception異常,並指出版本檢查失敗,當前事務正在試圖提交乙個過期資料。通過捕捉這個異常,我們就可以在樂觀鎖校驗失敗時進行相應處理。

hibernate 持久化類

持久化類是什麼 持久化類的編寫規則 持久化類的三種狀態 瞬時態 這種物件沒有唯一的標識 oid 沒有被session管理 持久態 有oid 被session管理 脫管態 有oid 但沒有被session管理 三種狀態轉換 持久態物件 獲得 get load find itrerate session...

初學Hibernate持久化

hibernate三種持久化物件狀態 持久化物件 persistent object pojo hbm對映 1 瞬時狀態 臨時狀態或自由態 po物件剛建立 即new 開始進入瞬時狀態,此時物件並無oid 2 持久化狀態 執行了session.s e 之後,po物件就在session管理範圍內了 3 ...

如何理解Hibernate的持久化?

學習hibernate,必須要理解什麼是持久化?結合了一下網上的各位大佬的觀點和自己的理解 持久化是將程式資料在持久狀態和瞬時狀態間轉換的機制。通俗的講,就是瞬時資料 比如記憶體中的資料,是不能永久儲存的 持久化為持久資料 比如持久化至資料庫中,能夠長久儲存 而hibernate是對jdbc的輕量級...