2014-02-05 1 views
5

Я использую репозитории данных весны, и у меня есть проблема, я не могу найти ответ. Мой репозиторий запроса:Поле @Version не обновляется при выполнении массового обновления через Spring Data JPA

@Modifying 
@Query("UPDATE User u SET u.firstName = 'blabla' WHERE u.loginName = 'admin'") 
public int test(); 

И компания User имеет javax.persistence.Version аннотированный поле:

@Version 
private Long version; 

Когда я выполнить запрос в поле версии не обновления, но если вместо этого запроса я сделать :

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

обновленное поле версии. Зачем?

ответ

5

Раздел 4.10 спецификации JPA 2.0 прямо говорится:

обновления Bulk карты непосредственно к операции обновления базы данных, минуя Оптимистическую блокировку проверки. Портативные приложения должны вручную обновлять значение столбца версии, если это необходимо, и/или вручную проверять значение столбца версии.

В общем, массовое обновление и удаление в значительной степени обходят множество функций, применяемых поставщиком непрерывности, к которым вы могли бы привыкнуть, просто сохраняя объект. Помимо оптимистической блокировки, это включает в себя управляющий каскадом операций персистентности персистентность.

 Смежные вопросы

  • Нет связанных вопросов^_^