Оптимистичная блокировка в Spring Data JPA работает на основе поля версии для обнаружения конфликтов и обеспечения того, чтобы обновления не перезаписывали друг друга. 1
Процесс происходит в несколько шагов: 4
- Добавление столбца версии. 4 В таблицу базы данных добавляется новый столбец «версия», в котором хранится номер версии каждой строки. 4
- Чтение номера версии. 4 Когда пользователь хочет изменить строку, приложение сначала читает текущий номер версии этой строки. 4
- Обновление строки с новой версией. 4 Когда пользователь обновляет строку, приложение увеличивает номер версии на 1 и записывает обновлённые данные обратно в базу данных. 4
- Проверка валидации. 4 База данных проверяет, соответствует ли номер версии ожидаемому значению (то есть номер версии в базе данных должен превышать предыдущий номер версии на 1). 4
- Обнаружение конфликтов. 1 Если проверка проваливается (это означает, что другая транзакция изменила данные за это время), транзакция прерывается. 4 Затем пользователя просят повторить процесс с шага 2. 4
Оптимистичная блокировка предполагает, что конфликты редки, и позволяет параллельным транзакциям выполняться без блокировки данных. 1