在jpa中处理乐观锁定的最合适方法是什么。我有以下解决方案,但不知道使用它更好。
如果有更好的解决方法,请任何人建议我。
答案 0 :(得分:1)
你不会说为什么使用乐观锁定。
您通常使用它来避免长时间阻塞资源(如数据库行),即从数据库中读取数据并显示给用户。最终,用户对数据库进行了更改,并将数据写回。
您不希望在此期间阻止其他用户的数据。在这种情况下,出于同样的原因,你不想使用选项2。
选项1并不容易,因为乐观锁定异常会告诉您某些内容已经改变了您背后的数据,并且您将使用您的数据覆盖这些更改。重新尝试编写数据对此没有帮助。
在某些情况下,选项3可能是可能的,但会增加许多复杂性和可能的错误。到目前为止,这将是我的最后一招。
根据我的经验,乐观锁定异常非常罕见。在大多数情况下,最简单的方法是丢弃所有内容,并从头开始重新执行,即使它意味着告诉用户:抱歉,出现意外问题,请再次执行。
另一方面,如果你经常在两个竞争线程之间遇到这些问题,你应该尽量避免它。在这些情况下,选项2可能会继续,但这取决于方案。
如果用户交互和后台线程之间发生冲突(而不是两个用户之间),您可以尝试更改后台线程的时间,或者通知后台线程延迟其工作。
总结一下:它主要取决于您的设置,以及异常发生的时间和方式。