![](/img/trans.png)
[英]How to unit test pessimistic locking with Spring Boot + Spring Data JPA
[英]JPA pessimistic locking and JpaTemplate in Spring
是否可以通过Spring JpaTemplate方法使用PESIMISTIC锁定选项?
我知道可以使用EntityManager的方法来执行PESIMISTIC锁定,例如
帐户acc = em.find(Account.class,123);
em.lock(acc,PESIMISTIC);
JpaTemplate
上没有专门用于此目的的方法,但是如果需要访问它,则可以使用JpaTemplate.execute()
,该方法接受EntityManager
随附的回调,并且您可以在该回调中执行任何所需的操作。
根据您的情况,更好的解决方案可能是使用Spring的事务层 。 如果使用@Transactional
注释DAO(请参见上一链接),则JpaTransactionManager
应该为您管理实体锁定,具体取决于@Transactional
属性的isolation
属性。
根据默认的隔离级别,查找后加锁可能使您容易遇到一致性问题。 同样,您发布的代码可能会变成两次数据库往返,而不仅仅是一次。 最好这样做:
em.find(Account.class, 123, PESSIMISTIC);
或者,如果您使用的是JPA 1:
Account acc = em.getReference(Account.class, 123); em.lock(acc, PESSIMISTIC);
(这本身并不是对问题的解答,而是对OP代码的注释。可悲的是,Stack Overflow注释似乎不支持格式。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.