时间表如下所示:
用户(浏览器)--------------------------->更新TARGET 2 ----------------->
线程------>更新TARGET 1 ---------> long_operation ----->更新TARGET 3
我启动一个线程来执行long_operation,并在操作之前和之后更新TARGET对象。
问题是,在long_operation期间,用户可以在UI中更新TARGET。因此,当我尝试在long_operation之后更新TARGET时,我得到一个乐观的锁定异常。
我使用版本号进行乐观锁定,而更新2则在事务中。
我尝试在不同的交易中执行更新1和3 - >不起作用。 我还尝试在执行update_3之前更新版本号 - >不起作用。
不确定这里做什么是正确的....
答案 0 :(得分:0)
我得到了我做错的事。
我需要从缓存中逐出TARGET对象,并在执行update_3之前从数据库重新读取它以获取最新版本。
在我更新“旧”TARGET之前,因此获得乐观的锁定异常。