如何使用JPA释放被锁定的行?

9
我正在使用JPA 2.0的EclipseLink实现,它允许悲观锁定。我知道如何锁定实体,但是如何释放锁定呢?一开始我以为这一切都在事务中处理(换句话说,实体被锁定直到你提交事务),但事实并非如此。我尝试了快速的谷歌搜索(似乎这应该很明显),但我没有找到任何相关信息...
1个回答

14

经过一些休息和早晨的测试,我相信我已经解决了我的问题。

所以锁实际上是在事务中被处理的。但是,当我测试我的代码时,我能够使用EntityManager.find(Class, key)方法(没有指定锁定策略)检索到一个被锁定的行。

我错误地认为通过在一行上放置锁,该行就不能被读取。然而,我重新阅读了PESSIMISTIC_READPESSIMISTIC_WRITE的JPA定义,并注意到了我的问题:

PESSIMISTIC_READ - 实体在数据库上被锁定,防止其他事务获得PESSIMISTIC_WRITE锁。 PESSIMISTIC_WRITE - 实体在数据库上被锁定,防止其他事务获得PESSIMISTIC_READ或PESSIMISTIC_WRITE锁。

锁定并不一定阻止所有的读操作,它只是防止另一个事务在这一行上加上READ或WRITE锁


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接