После того, как я немного поспал ... и утром провел еще какое-то тестирование, мне кажется, я понял свою проблему. Таким образом, блокировка фактически выполняется в рамках транзакции. Однако, когда я тестировал свой код, я смог получить заблокированную строку, используя метод EntityManager.find (Class, key) (стратегия блокировки не указана). Я ошибочно думал, что, установив блокировку строки, строка не может быть прочитана. Период. Однако я перечитал JPA-определения PESSIMISTIC_READ и PESSIMISTIC_WRITE и заметил мою проблему:
PESSIMISTIC_READ - Объект заблокирован в базе данных, запрещает любой другой транзакции получить блокировку PESSIMISTIC_WRITE.
PESSIMISTIC_WRITE - Объект заблокирован в базе данных, запрещает любой другой транзакции получить блокировку PESSIMISTIC_READ или PESSIMISTIC_WRITE.
Блокировка не обязательно предотвращает все чтения, она просто запрещает другой транзакции поставить блокировку READ или WRITE в строку.