有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

由@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) 个答案