我對JPA相當陌生,並且在JPA2.0中閱讀關於鎖定模式的文章this,這給我留下了一個關於LockModeType.OPTIMISTIC_FORCE_INCREMENT的問題。JPA 2.0的語義OPTIMISTIC_FORCE_INCREMENT
這裏是從文章一例的印象:http://i.stack.imgur.com/dFjhZ.jpg
到目前爲止,據我所知,在事務T1明確的樂觀鎖是唯一必要的,如果我更新到實體A依賴於另一個實體B的狀態剛剛閱讀。
我也明白,使用OPTIMISTIC_FORCE_INCREMENT鎖導致B到更新的版本屬性,這將導致OptimisticLockException在嘗試更新B和讀過它發出鎖定之前,所有交易(即與舊版本值) 。
我的問題是:如果另一個事務T2在B版本增加後立即啓動,在T1提交之前更改B並完成,會發生什麼?
據我瞭解,T1應該得到一個OptimisticLockException。如果是這樣,這個鎖定點有什麼意義,因爲它只是略微減少了T1的脆弱時間窗口?這將意味着:如果我想確保B在T1完成前不被更改,我需要一個悲觀的鎖,對吧?
預先感謝明確告知我:)
感謝您的明確。 – Sheba 2013-03-11 09:06:20