2010-03-02 28 views
5

我正在使用允許悲觀鎖定的JPA 2.0的EclipseLink實現。我知道如何鎖定一個實體,但我如何釋放鎖?起初,我認爲這一切都是在交易中處理的(換句話說,實體被鎖定,直到您提交交易),但似乎並非如此。如何使用JPA釋放鎖定的行?

我嘗試了快速谷歌搜索(好像這應該是很明顯的),但我沒有發現任何東西......

回答

9

得到一些睡眠...和做早上一些測試後,我相信我已經發現了我的問題。所以鎖實際上是在交易中處理的。但是,當我測試代碼時,我能夠使用EntityManager.find(Class,key)方法(未指定鎖定策略)檢索鎖定的行。我錯誤地認爲通過對行進行鎖定,行不能被讀取。期。不過,我重讀PESSIMISTIC_READ和PESSIMISTIC_WRITE的JPA定義,發現我的問題:

PESSIMISTIC_READ - 實體鎖定數據庫,防止任何其他交易從獲取PESSIMISTIC_WRITE鎖。 PESSIMISTIC_WRITE - 實體鎖定在數據庫上,阻止任何其他來自的事務獲取PESSIMISTIC_READ或PESSIMISTIC_WRITE鎖。

該鎖並不一定會阻止所有讀取,它只是防止另一個事務對行進行READ或WRITE鎖定。