Обе являются эксклюзивными блокировками, но вторая вызовет исключение, если ресурс занят, тогда как первая будет ждать.
документация по спящему режиму не очень понятна.
PESSIMISTIC_WRITE: «Транзакция немедленно получит блокировку базы данных».
за противостояние
UPGRADE_NOWAIT: «Попытка получить блокировку обновления, используя выбор в стиле Oracle для обновления nowait». в отношении nowait: Oracle будет ожидать снятия любых блокировок, если вы не укажете NOWAIT
Однако сейчас это не сразу. «немедленно» PESSIMISTIC_WRITE относится к области сеанса (hibernate будет вызывать блокировку базы данных немедленно, а не автоматически при первой операции записи, как в режиме WRITE), но в этом режиме база данных будет ожидать освобождения других блокировок вместо вызов исключения, если ресурс занят (это простая инструкция select... for update
).
Обратите внимание, что весьма вероятно, что не все базы данных поддерживают схему nowait, например, mysql реализовал ее в версии 8 , в этом случае оба режима будут эквивалентны.