2015-04-22 67 views
0

我試圖控制對spring + jpa配置中同一對象的併發訪問。 例如,我有一個名爲A的實體。現在多個進程更新A的同一對象。 我正在使用版本控制字段,但控制它,但這裏是問題: 例如,2個進程讀取具有版本的相同實體= 1。 現在一個進程更新實體並且版本得到遞增。 當第二個進程試圖保持對象時,會拋出樂觀鎖異常。 我正在使用spring服務和存儲庫來訪問對象。 你能幫我嗎?彈簧實體併發控制,同時堅持到數據庫中

+0

你描述什麼是你想要的場景的結果?你想要發生什麼? –

+0

在這裏看到答案:http://stackoverflow.com/a/19456821/1356423 –

回答

0

那麼問題是什麼?這就是它應該如何工作。

你可以捕獲JpaOptimisticLockingFailureException,然後決定從那裏做些什麼。

此,例如,將給予驗證錯誤消息的Spring MVC的形式:

... 
if(!bindingResult.hasErrors()) { 
    try { 
    fooRepository.save(foo); 
    } catch (JpaOptimisticLockingFailureException exp){ 
     bindingResult.reject("", "This record was modified by another user. Try refreshing the page."); 
    } 
} 
... 
+0

我期待如果hibernate或jpa本身可以處理這個異常並重新加載對象。 – RichyRich

+0

@richyrich重新加載並不總是最好的選擇,所以他們會把它留給你。 –