JPA пессимистическая блокировка и JpaTemplate весной - PullRequest
2 голосов
/ 02 марта 2010

Можно ли использовать параметр блокировки PESIMISTIC с помощью методов Spring JpaTemplate?

Я знаю, что блокировку PESIMISTIC можно выполнить с помощью методов EntityManager, например

Аккаунт acc = em.find (Account.class, 123);

em.lock (в соответствии с PESIMISTIC);

Ответы [ 2 ]

1 голос
/ 02 марта 2010

Для этого нет ничего конкретного на JpaTemplate, но если вам нужен доступ к нему, вы можете использовать JpaTemplate.execute(), который принимает обратный вызов, поставляемый с EntityManager, и вы можете делать все что угодно в этом обратный вызов.

Лучшим решением, в зависимости от вашей ситуации, может быть использование уровня транзакций Spring . Если вы аннотируете свой DAO с помощью @Transactional (см. Предыдущую ссылку), JpaTransactionManager должен управлять блокировкой объекта для вас, в зависимости от атрибута isolation атрибута @Transactional.

0 голосов
/ 02 марта 2010

В зависимости от уровня изоляции по умолчанию, поиск и блокировка могут оставить вас открытыми для проблем согласованности. Кроме того, код, который вы разместили, вероятно, превратится в два обхода базы данных вместо одного. Было бы предпочтительнее сделать:

  em.find(Account.class, 123, PESSIMISTIC);

Или, если вы используете JPA 1:

  Account acc = em.getReference(Account.class, 123);
  em.lock(acc, PESSIMISTIC);

(Это не ответ на вопрос как таковой, а скорее комментарий о коде OP. К сожалению, комментарии переполнения стека, похоже, не поддерживают форматирование.)

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