Согласно спецификации JPA 2.1...
Режимы блокировки
PESSIMISTIC_READ
,PESSIMISTIC_WRITE
иPESSIMISTIC_FORCE_INCREMENT
используются для немедленного получения долгосрочных блокировок базы данных.
Я предполагаю, что пессимистическая блокировка всегда будет запускать SELECT ... FOR UPDATE
SQL в базе данных, независимо от того, какой режим блокировки используется. Теперь три вопроса по этому поводу:
- Верно ли предположение или есть исключения из этого правила, если оно верно?
- Учитывая
SELECT ... FOR UPDATE
, заблокированы строки. Заблокированные строки не могут быть обновлены какой-либо другой транзакцией, кроме транзакции, которая их заблокировала? - Блокировку можно снять, выполнив фиксацию или откат транзакции. Что произойдет с блокировкой, если приложение (и транзакция, которая заблокировала строки) внезапно завершится без фиксации или отката транзакции?