2010-03-01 7 views
2

Возможно ли использовать опцию блокировки PESIMISTIC с использованием методов Spring JpaTemplate?JPA пессимистическая блокировка и JpaTemplate весной

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

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

em.lock (acc, PESIMISTIC);

+0

Какой поставщик баз данных вы используете? –

ответ

1

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

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

+0

Я хотел использовать атрибут изоляции на уровне методы аннотаций, но JPA, кажется, не поддерживает, кроме уровней изоляции по умолчанию: 'org.springframework.transaction.InvalidIsolationLevelException: Стандартный JPA не поддерживает уровни изоляции пользовательских - использовать специальный JpaDialect для ваша реализация JPA' –

+0

Общим для людей является то, что простой JPA недостаточно хорош, и им нужно использовать проприетарные расширения, чтобы выполнить свою работу. Какую реализацию JPA вы используете? – skaffman

+0

Мы используем EclipseLink –

0

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

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

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

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

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

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