繁体   English   中英

Spring中的JPA悲观锁定和JpaTemplate

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM