是否可以使用JPA版本控制/乐观锁定来防止旧数据被提交以进行修改?

时间:2016-05-27 06:17:47

标签: java jpa concurrency optimistic-locking

我想阻止以下情况:

  • 用户1会打开一个允许他修改某些数据的网页
  • 用户2打开一个允许他修改相同数据的网页
  • 用户2修改并保​​存数据
  • 用户1尝试修改并保存数据(需要防止这种情况)

我们目前使用JPA乐观锁定,它为我们的实体提供版本号。在我们的业务逻辑中使用该版本属性来防止修改发生是不是一种坏习惯?

奖金问题:如果可以使用版本属性,那么只允许发生OptimisticLockException以便修改失败是不好的做法?或者只是懒惰?

1 个答案:

答案 0 :(得分:1)

这基本上是乐观锁定。版本控制为您提供了一些明显的额外好处。

您是否可以依赖OptimisticLockException取决于您的申请。如果您在保存可能失败之前执行了大量操作,则可能需要提前检查,即快速失败(尽管最后仍然可能失败)。

在更简单的情况下,你没有理由不等待查看是否抛出异常,因为你无论如何都需要处理它。