Достаточно ли LockModeType.PESSIMISTIC_WRITE для UPSERT в JPA? - PullRequest
8 голосов
/ 30 сентября 2010

Я прочитал эту статью о параллелизме JPA , но либо я слишком толстый, либо недостаточно точный.

Я хочу сделать элементарное обновление под управлением базы данных-Операция if-found-else-insert (UPSERT).

Она смотрит на мой слабый медленный ум, который я могу - в рамках транзакции, конечно - выполнить именованный запросс режимом блокировки PESSIMISTIC_WRITE, посмотрите, возвращает ли он какие-либо результаты, а затем либо persist(), либо update().

Что мне неясно, так это различия между выполнением этой операции сPESSIMISTIC_WRITE блокировка против PESSIMISTIC_READ блокировки.Я прочитал предложения - я понимаю, что PESSIMISTIC_READ предназначен для предотвращения неповторяющихся чтений, а PESSIMISTIC_WRITE ... ну, может быть, я не очень хорошо понимаю это :-) - но под нимэто просто SQL SELECT FOR UPDATE, да?В обоих случаях?

Ответы [ 3 ]

4 голосов
/ 01 октября 2010

Я пытаюсь выполнить управляемую базой данных атомарную операцию update-if-found-else-insert (UPSERT).

Возможно, я не отвечаю точно на весь вопрос, но если вы хотите реализовать вышеизложенное без каких-либо условий гонки, вам нужен IMO уровень таблицы LOCK IN EXCLUSIVE MODE (не только строки). Я не знаю, можно ли это сделать с помощью JPA. Может быть, вы могли бы уточнить, что для вас приемлемо.

2 голосов
/ 21 февраля 2013

Я сталкивался с такой ситуацией и нашел это:

Пессимистическая блокировка, это означает, что блокировка объектов в начале транзакции и сохранение блокировки во время транзакции выполняется с помощью этих 2 PessimisticLockModes: - LockModeType.PESSIMISTIC_READ -> сущность может быть прочитана другими транзакциями, но никакие изменения не могут быть сделаны - LockModeType.PESSIMISTIC_WRITE -> сущность не может быть прочитана или записана другими транзакциями

ссылка на статью

0 голосов
/ 30 апреля 2017

Я пытаюсь выполнить управляемую базой данных атомарную операцию обновления, если найден еще вставка (UPSERT).

INSERT .. ON DUPLICATE KEY UPDATE делает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...