Как кодировать оптимистическую и пессимистическую блокировку из кода Java
Я знаю, что такое оптимистическая и пессимистическая блокировка, но когда вы пишете код Java, как вы это делаете? Предположим, я использую Oracle с Java, у меня есть какие-либо методы в JDBC, которые помогут мне сделать это? Как я буду настраивать эту вещь? Любые указатели будут оценены.
2 ответа
Вы можете реализовать оптимистические блокировки в своей таблице БД следующим образом (вот как в Hibernate делается оптимистическая блокировка):
- Добавьте в таблицу целочисленный столбец "версия".
- Увеличивайте значение этого столбца при каждом обновлении соответствующей строки.
- Чтобы получить блокировку, просто прочитайте значение "version" строки.
- Добавьте условие "версия = полученная_версия" в предложение where вашего оператора обновления. Проверьте количество затронутых строк после обновления. Если ни одна строка не была затронута - кто-то уже изменил вашу запись.
Ваше обновление должно выглядеть так
UPDATE mytable SET name = 'Andy', version = 3 WHERE id = 1 and version = 2
Конечно, этот механизм работает, только если все стороны следуют ему, в отличие от предоставляемых СУБД блокировок, которые не требуют специальной обработки.
Надеюсь это поможет.
Предположим, я использую Oracle с Java, у меня есть какие-либо методы в JDBC, которые помогут мне сделать это?
Этот документ Oracle должен дать вам несколько советов о том, как это сделать.
Нет конкретных методов JDBC. Скорее, вы достигаете оптимистической блокировки путем разработки запросов / обновлений SQL и определения границ транзакций.