Является ли блокировка JPA атомарной? - PullRequest
1 голос
/ 07 июля 2011

Я использую реализацию Eclipse Link, но, возможно, это относится и к Hibernate.В какой-то момент я позвонил:

em.lock(entity, LockModeType.OPTIMISTIC_FORCE_INCREMENT);

, который я считал атомарной операцией.

Удивительно - после установки точки останова на поле @Version кажется, что существует много вызовов entity._persistence_get и entity._persistence_set.

По-видимому - можно добраться до одной и той же точки с помощью отладчика, используя два браузера, и переключаться между потоками, пока они еще выполняют эти скрытые функции.Когда это сделано - оба потока не могут быть сброшены / зафиксированы позже.

Есть ли какое-либо изменение, которое может произойти, если не в Release Mode, или это только из-за отладчика?С уважением, Даниэль

1 Ответ

0 голосов
/ 07 июля 2011

Нет способа (AFAIK) предотвратить переключение контекста в Java.Таким образом, я не понимаю, как блокировка может быть атомарной в этом смысле.Но я также не понимаю, почему это все равно будет иметь значение, поскольку не предполагается, что присоединенная сущность не будет использоваться одновременно несколькими потоками.

...