由@Version annotated int不递增引起的java OptimisticLockException
当我进行以下修改时,我开始从以前的工作Play应用程序中抛出一个OptimisticLockException:
我在实体中添加了一个新字段hasStarted:
@Entity public class ExperimentInstance extends Model { @Version public int version; @Id public Long id; public boolean hasStarted; ...
在数据库中定义为:
alter table experiment_instances add column has_started bit default 0;
我在TimerTask中更新新字段,如下所示:
final ExperimentInstance runningInstance = ExperimentInstance.findById(experimentInstanceId); new Timer().schedule(new TimerTask() { @Override public void run() { if (runningInstance != null) { runningInstance.hasStarted = true; runningInstance.save(); } } }, lifetimeInMs);
我为数据库启用了事务日志,并看到以下两条sql语句:
update experiment_instances set has_started=true, version=3 where id=3721 and version=2
很久以后:
update experiment_instances set status='FINISHED', version=3 where id=3721 and version=2
很明显,问题在于@Version注释字段在表更新之前没有从2增加到3;然而,我不知道从哪里开始调试这个问题
任何帮助都将不胜感激
共 (0) 个答案