我开始使用JPA乐观锁定。我需要实现以下场景。
用户放置一些请求以供考虑。此请求具有状态属性。只是把它放在状态'new'。然后,几个服务可以观察此请求并通过更改其状态来提供服务。 (状态可以是,例如,'处理',*'put_back'*,'已完成')。因此,我使用乐观锁定来确保当前只有一个服务处理请求。因此,当其他一些服务尝试将请求的状态从“新”更改为“处理”时,它会给我OptimisticLockingException
并且我会通过这样的信息通知服务“请求的当前状态已更改,请刷新您的请求列表“。这听起来很正常。所以这就是两个服务同时尝试处理同一个请求的情况。
但我的特殊要求是,在任何时间段内,用户都可以通过将其状态设置为'已取消'来取消请求。所以我也可以在这种情况下获得OptimisticLockingException
例外。但我不需要它。因此请求不会被取消。在这里,我希望将状态置于“已取消”状态,无论是否被其他人更改。我想我不应该要求用户再次取消他的请求。
我的问题是:我如何使用EclipseLink 2.4.1来处理这种情况。我正在使用持久性。
注意:我是JPA中乐观锁定的新手,所以我可以错过一些内容,如果有的话,请更正。
答案 0 :(得分:0)
我会在你的申请中处理这件事。如果在cancelRequest()操作中遇到锁定异常,只需捕获异常并重试事务直到它提交为止。
您也可以使用JPQL更新查询,因为它不会检查锁定版本。