java - jpa中如何处理乐观锁异常

标签 java database jpa

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

  1. 处理catch阻塞中的乐观锁异常并重试。
  2. 使用原子变量标志并检查其处理是否然后等待其他线程完成其处理。这样可以避免数据修改或锁定争用。
  3. 维护所有传入数据库更改请求的队列并一一处理。

任何人请建议我是否有更好的解决方案来解决这个问题。

最佳答案

您没有说明为什么使用乐观锁定。

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

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

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

选项 3 在某些情况下可能是可行的,但会增加很多复杂性并可能出现错误。到目前为止,这将是我最后的手段。

根据我的经验,乐观锁定异常非常罕见。在大多数情况下,最简单的解决办法是放弃所有内容,然后从头开始重做,即使这意味着告诉用户:抱歉,出现了意外问题,请重做一次。

另一方面,如果您经常在两个竞争线程之间遇到这些问题,则应该尽力避免它。在这些情况下,可以选择选项 2,但这取决于具体情况。

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

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

关于java - jpa中如何处理乐观锁异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28712901/

相关文章:

sql - 从 Access 迁移到 SQL Server

php - 有没有办法只能获取两个日期之间的数据集?

java - 奇怪的延迟加载异常

java - 我如何从pfx证书中读取java中的私钥

java - Hibernate:如何使用@Embeddables 的自定义集合?

java - 如何从另一个类更新一个类中的变量

database - 运行 MS Access 查询的批处理文件和

java - JPQL 元素集合 : getting all users which have at least one role of a list

java - Spring Boot 如何处理 Hibernate session ?

java - 在 Java 中均匀地生成一个范围内的安全随机数