2014-02-05 79 views
5

我正在使用spring數據存儲庫,並且遇到問題我無法找到答案。我的資料庫查詢是:@Version字段在通過Spring數據執行批量更新時未更新JPA

​​

與實體Userjavax.persistence.Version標註的字段:

@Version 
private Long version; 

當我執行的版本字段不更新查詢,但如果不是查詢我做:

User user = this.userRepository.findUserById(1L); 
user.setFirstName("blabla"); 
this.userRepository.save(user); 

版本字段被更新。爲什麼?

回答

5

JPA 2.0規範的第4.10節明確規定:

批量更新直接映射到一個數據庫更新操作,繞過樂觀鎖檢查。如果需要,便攜式應用程序必須手動更新版本列的值,和/或手動驗證版本列的值。

一般來說,批量更新和刪除幾乎繞過了很多由持久性提供程序應用的功能,您可能會習慣在保存實體時使用這些功能。除了樂觀鎖定之外,這還包括持久性提供程序管理的持久性操作級聯。