Я прочитал главу книги Мартина Фаулера Optimistic Offline Lock
Автор описывает следующий пример (если я правильно понял):
Есть 2 объекта: Order
и Client
. Участвуют 2 сделки (бизнес):
Первая транзакция рассчитывает сумму налога на заказ. Сумма налогов зависит от пунктов Заказа и адреса клиента.
Вторая транзакция обновляет адрес клиента
Проблема здесь в том, что если client
адрес будет изменен при расчете суммы налогов order
, результат может быть противоречивым. Авторы предложили 2 решения, основанные на оптимистичной автономной блокировке. Один из них - проверка версий order
и client
в начале транзакции и проверка версий order
и client
в конце транзакции. Но здесь автор предупреждает, что мы должны использовать уровень изоляции REPEATABLE READ
или выше, чтобы иметь возможность читать версии второй раз. Это причина моего вопроса. Насколько я понимаю, если я прочитаю любую строку во второй раз, я получу тот же результат, потому что при использовании этого уровня изоляции БД блокирует все строки, которые мы читали раньше.
Объясните, пожалуйста, автор идеи.