2015-02-03 4 views
2

Справочная информация: У меня проблема, которая является симптомом обновления сущности, который не проходит. Просмотрев мои журналы, я вижу, что я вижу ожидающие обновления операторы sql, но они почти одновременно (0,012 секунды друг от друга), и приложение использует пессимистическую блокировку чтения при обновлении объекта.JPA - Пессимистический замок - что происходит, когда существует блокировка?

Это приводит меня к моему вопросу: Каково ожидаемое поведение, когда существует пессимистическая блокировка? Должен ли я ожидать появления нескольких запросов обновления? Я должен ожидать, что PessimisticLockException будет выброшено, не так ли? Есть ли какие-то другие показатели, которые я должен искать?

Hibernate - это моя реализация JPA.

ответ

3

Песочные блокировки фактически передаются на уровень БД с использованием SQL-запросов (проверяйте выполненные запросы для сравнения). Если существует пессимистическая блокировка, приложение должно дождаться БД до тех пор, пока блокировка не будет выпущена, поэтому необязательно вызывать эксплойт (но это может быть).

Теперь об исключениях:

/* 
PessimisticLockException if pessimistic locking fails and the transaction is rolled back 
LockTimeoutException if pessimistic locking fails and only the statement is rolled back 
*/ 
public <T> T find(Class<T> entityClass, Object primaryKey, LockModeType lockMode); 

Для других методов EntityManager эти два исключения выбрасываются в simmilar ситуациях.

1

Пессимистическая блокировка предотвращает одновременное обновление объектов. Вместо этого обновления объекта формируют цепочку - если блокировка уже существует, обновление будет ждать, пока блокировка не будет отпущена.

Таким образом, выброс исключений не ожидается в результате пессимистической блокировки. Ожидаемое поведение - это устранение параллелизма, описанного выше.

Для дальнейшего ознакомления вы можете обратиться к this и this источникам.

В нашем случае кажется, что ваше обновление не проходит, потому что оно перезаписано некоторым более поздним обновлением.

Смежные вопросы