是否可以使用Spring JpaTemplate方法使用PESIMISTIC锁定选项?
我知道可以使用EntityManager的方法执行PESIMISTIC锁定,例如
帐户acc = em.find(Account.class,123);
em.lock(acc,PESIMISTIC);
答案 0 :(得分:1)
JpaTemplate
上没有具体的内容,但如果您需要访问它,可以使用JpaTemplate.execute()
,它会接受EntityManager
提供的回调,您可以在回调中做任何你喜欢的事。
根据您的具体情况,更好的解决方案可能是使用Spring's transaction layer。如果您使用@Transactional
注释DAO(请参阅上一个链接),JpaTransactionManager
应该为您管理实体锁定,具体取决于isolation
属性的@Transactional
属性。
答案 1 :(得分:0)
根据您的默认隔离级别,查找后跟一个锁可能会让您对一致性问题持开放态度。此外,您发布的代码可能会变成两个数据库往返而不是一个。最好这样做:
em.find(Account.class, 123, PESSIMISTIC);
或者,如果您使用的是JPA 1:
Account acc = em.getReference(Account.class, 123); em.lock(acc, PESSIMISTIC);
(这不是问题本身的答案,而是对OP代码的评论。遗憾的是,Stack Overflow评论似乎不支持格式化。)