我正在學習 JPA 悲觀鎖。我找到了以下解釋PESSIMISTIC_READ - 實體在數據庫上被鎖定,防止任何其他事務獲取 PESSIMISTIC_WRITE 鎖。PESSIMISTIC_WRITE - 實體在數據庫上被鎖定,防止任何其他事務獲取 PESSIMISTIC_READ 或 PESSIMISTIC_WRITE 鎖。如果我理解正確的話,那么如果我們有三個用戶(A,B,C),用戶A獲得READ鎖,那么用戶B也可以獲得READ鎖,但是用戶C無法獲得WRITE鎖,直到用戶A和B釋放他們的鎖。如果用戶 A 獲得 WRITE 鎖,那么在用戶 A 釋放鎖之前,用戶 B 和用戶 C 什么也得不到。但是,對于我的客戶端-服務器應用程序,我需要以下邏輯。如果用戶只想讀取實體,則他們以只讀模式打開實體(無限數量的用戶可以同時進行)。如果某個用戶想要編輯他在 WRITE 模式下打開它的實體 - 沒有人可以在 WRITE 模式下打開同一個實體(直到用戶釋放 WRITE 鎖)但所有其他人仍然可以在 READ-ONLY 模式下打開實體。我有兩個問題:我對JPA悲觀鎖的理解對嗎?是否可以讓 JPA 執行我需要的邏輯(使用 JPA 鎖定機制)?
1 回答

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
我對JPA悲觀鎖的理解對嗎?
是的,這正是讀/寫鎖定的工作原理
...但所有其他人仍然可以在 READ-ONLY 模式下打開實體
我不太確定你的意思。我們還是在說多個事務同時執行吧(我有種奇怪的感覺,不是你的意思)?如果是這種情況,那么按照您的邏輯,持有“READ_ONLY”鎖將無濟于事。
鎖定意味著“我正在凍結此資源,以便某些其他事務在我完成之前無法繼續”。但是,在您描述的邏輯中,當您持有“READ_ONLY”鎖時,允許持有“READ_ONLY”鎖的事務和持有“WRITE”鎖的事務繼續進行。
添加回答
舉報
0/150
提交
取消