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

问题描述 投票:7回答:1

我正在使用JPA 2.0的EclipseLink实现,该实现允许悲观锁定。我知道如何锁定实体,但是如何释放锁定?起初我以为这是在事务内处理的(换句话说,实体是锁定的,直到您提交事务为止),但事实并非如此。

我尝试了快速的google搜索(看起来应该很明显),但是我什么都没找到...

java jpa locking eclipselink pessimistic
1个回答
10
投票

睡了一会儿...并在早上做更多测试后,我相信我已经解决了我的问题。

因此锁实际上是taken care of within a transaction。但是,在测试代码时,我可以使用EntityManager.find(Class, key)方法检索锁定的行(未指定锁定策略)。

我错误地认为,通过在一行上加一个锁,无法读取该行。但是,我重新读取了PESSIMISTIC_READPESSIMISTIC_WRITE的JPA定义,并注意到了我的问题:

PESSIMISTIC_READ-实体已锁定在数据库上,阻止任何其他事务获取PESSIMISTIC_WRITE锁定。PESSIMISTIC_WRITE-实体已锁定在数据库上,阻止任何其他事务获取PESSIMISTIC_READ或PESSIMISTIC_WRITE锁定。

lock不一定阻止所有读取,它只是防止另一个事务将READ or WRITE lock放在行上。

© www.soinside.com 2019 - 2024. All rights reserved.