我有一个关于Java乐观锁定异常的问题。我有一个针对每个新用户会话实例化的服务类(到春季),它包含执行数据库操作的非静态方法。我想知道如何避免对读/写到db的实体的乐观锁定异常。我想获得与同步方法类似的结果,但是我想使用“同步”是不可能的,因为该方法不是静态的,并且当用户拥有自己的服务实例时不会产生任何影响?我可以以某种方式检测是否将新版本的实体保存到db,然后检索新版本,然后编辑并保存该版本吗?我希望该事务能够一直保持到确定为止,即使这意味着该事务必须等待其他事务。我的第一个想法是将事务代码放入try-catch块中,然后在引发乐观锁定异常的情况下重试事务(读取和写入)。该解决方案“太容易了”还是?

最佳答案

乐观锁定用于提高性能,但仍避免弄乱数据。

如果乐观锁发生故障,则用户(决定更新失败)需要决定是否要再次执行操作。您无法自动执行此操作,因为这完全取决于更改的内容和更改方式。

因此,不,您的使用try / catch重试事务的想法不是“太简单的解决方案”。这不是一个解决方案,这将是一个严重的(愚蠢的)错误。

07-28 13:54