【问题标题】:How to release a locked row using JPA?如何使用 JPA 释放锁定的行?
【发布时间】:2011-01-22 23:39:26
【问题描述】:

我正在使用 JPA 2.0 的 EclipseLink 实现,它允许悲观锁定。我知道如何锁定实体,但如何释放锁定?起初我以为这一切都在事务中处理(换句话说,实体在您提交事务之前被锁定),但似乎并非如此。

我尝试了一个快速的谷歌搜索(看起来应该很明显),但我没有找到任何东西......

【问题讨论】:

    标签: java jpa locking eclipselink pessimistic


    【解决方案1】:

    睡了一会儿……早上又做了一些测试,我相信我已经找到了我的问题。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      相关资源
      最近更新 更多