1

我从 JPA 乐观锁定开始。我需要实现以下场景。

用户提出一些要求以供考虑。此请求具有状态属性。虽然只是说它有一个状态'new'。然后几个服务可以观察这个请求并通过改变它的状态来服务它。(例如,状态可以是'handling'、 *'put_back'*、'finished')。因此,我使用乐观锁定来确保当前只有一项服务正在处理该请求。因此,当其他一些服务尝试将请求的状态从“新”变为“处理”时,它会给我OptimisticLockingException我会通过类似“请求的当前状态已更改,请刷新您的请求列表”之类的信息通知服务。这听起来很正常。所以这就是两个服务试图同时处理同一个请求的情况。

但我的特殊要求是,在任何时候,用户都可以通过将其状态设置为'canceled'来取消请求。所以OptimisticLockingException在这种情况下我也可以得到例外。但我不需要它。因此,该请求不会被取消。在这里,我想将状态设置为“已取消”,无论它是否被其他人更改。我想我不应该要求用户再次取消他的请求。

我的问题是:如何使用我用于持久性的 EclipseLink 2.4.1 处理这种情况。

注意:我是 JPA 中乐观锁定的新手,所以我可能会遗漏一些东西,如果是,请纠正。

4

1 回答 1

0

我会在你的申请中处理这个。如果您在 cancelRequest() 操作中遇到锁定异常,只需捕获异常并重试事务直到它提交。

您也可以使用 JPQL 更新查询,因为它不检查锁定版本。

于 2013-04-01T14:38:40.347 回答