Как работает @Version
аннотация в JPA?Java - JPA - аннотация @Version
Я нашел различные ответы которых экстракт следующим образом:
JPA использует поле версии в ваших сущностях, чтобы обнаружить одновременные изменения в том же хранилище данных записи. Когда среда выполнения JPA обнаруживает попытку одновременного изменения одной и той же записи, она выдает исключение для транзакции, пытающейся зафиксировать последнюю.
Но я все еще не уверен, как это работает.
Кроме того, как один из следующих линий:
Вы должны рассмотреть версия полей неизменны. Изменение значения поля имеет неопределенные результаты.
Означает ли это, что мы должны объявить наше поле версии final
?
Все это делает чек/обновить версию в каждом запросе обновления: 'UPDATE MyEntity SET MyColumn = 'новое значение', версия = версия + 1 WHERE версия = [old.version]'. Если кто-то обновил запись, 'old.version' больше не будет соответствовать таковой в БД, а предложение where предотвратит это обновление. «Обновленные строки» будут «0», которые JPA может обнаружить, чтобы сделать вывод о том, что произошло параллельное изменение. –