我有一个关于java乐观锁定异常的问题。我有一个为每个新用户会话实例化(按弹簧)的服务类,它包含一个执行数据库操作的非静态方法。我想知道如何在读取/写入db的实体上避免乐观锁定异常。我想实现与同步方法类似的结果,但我想使用“synchronized”是不可能的,因为该方法不是静态的,并且当用户拥有自己的服务实例时不会有任何影响?我可以以某种方式检测实体的新版本是否保存到db然后检索新版本,然后编辑并保存该版本?我希望交易保持不变,即使它意味着交易必须等待其他交易。我的第一个想法是将事务代码放入try-catch块,然后在抛出乐观锁定异常时重试事务(读取和写入)。这个解决方案“太容易了”还是?
答案 0 :(得分:1)
乐观锁定用于提高性能,但仍然可以避免弄乱数据。
如果存在乐观锁定失败,则用户(更新失败)需要决定是否要再次执行操作。你不能自动化,因为它完全取决于改变的内容和方式。
所以不,你用try / catch重试事务的想法不是一个“太简单的解决方案”。这不是一个解决方案,它将是一个严重(和愚蠢)的错误。