У нас есть система, в которой мы время от времени получаем оптимистичное исключение блокировки. Мы работали над этим в коде, но теперь я смотрю JPA 2 и вижу, что для этого имеет аннотацию (@Version).
Проблема заключается в том, что более чем одна транзакция работает над таблицей, и с полной блокировкой таблицы это вызывает исключение оптимистической блокировки, даже если изменения не производятся в тех же записях.Оптимистическая блокировка и блокировка полного стола
Мы используем спящий режим на сервере JBoss 4.2, а база данных может быть либо MySQL, либо SQL Server.
Если бы мы изменили на использование @Version, это обеспечит блокировку строк в обеих базах данных или же мы можем ожидать оптимистичное исключение блокировки, вызванное полной блокировкой таблицы?
Edit:
То, что мы на самом деле видим, не оптимистическая блокировка ошибки, но тупиковый:
SQLServerException: Сделка была тупиковой на ресурсах блокировки с другой процесс и был выбран в качестве тупиковой жертва. Перезапустите транзакцию.
Мы имеем дело с этим в коде, но мне было интересно, может ли @Version оказать какую-либо помощь в этом случае.
По крайней мере, в одном из случаев этот тупик был вызван блокировкой стола, где два клиента работали с собственными данными.
Я боюсь, что этот вопрос смешивает концепции Оптимистического контроля параллелизма (например, Оптимистичная блокировка) и Блокировки базы данных по таблицам и строкам. –