如何在jpa中处理乐观锁定异常

时间:2015-02-25 06:50:09

标签: java database jpa

在jpa中处理乐观锁定的最合适方法是什么。我有以下解决方案,但不知道使用它更好。

  1. 在catch阻塞和再次重试时处理乐观锁定的异常。
  2. 使用原子变量标志并检查其处理是否等待,直到其他线程完成其处理。这样可以避免数据修改或锁定争用。
  3. 维护所有传入数据库更改请求的队列并逐个处理。
  4. 如果有更好的解决方法,请任何人建议我。

1 个答案:

答案 0 :(得分:1)

你不会说为什么使用乐观锁定。

您通常使用它来避免长时间阻塞资源(如数据库行),即从数据库中读取数据并显示给用户。最终,用户对数据库进行了更改,并将数据写回。

您不希望在此期间阻止其他用户的数据。在这种情况下,出于同样的原因,你不想使用选项2。

选项1并不容易,因为乐观锁定异常会告诉您某些内容已经改变了您背后的数据,并且您将使用您的数据覆盖这些更改。重新尝试编写数据对此没有帮助。

在某些情况下,选项3可能是可能的,但会增加许多复杂性和可能的​​错误。到目前为止,这将是我的最后一招。

根据我的经验,乐观锁定异常非常罕见。在大多数情况下,最简单的方法是丢弃所有内容,并从头开始重新执行,即使它意味着告诉用户:抱歉,出现意外问题,请再次执行。

另一方面,如果你经常在两个竞争线程之间遇到这些问题,你应该尽量避免它。在这些情况下,选项2可能会继续,但这取决于方案。

如果用户交互和后台线程之间发生冲突(而不是两个用户之间),您可以尝试更改后台线程的时间,或者通知后台线程延迟其工作。

总结一下:它主要取决于您的设置,以及异常发生的时间和方式。