当前位置: 首页 > 工具软件 > Concurrently > 使用案例 >

ActivitiOptimisticLockingException:was updated by another transaction concurrently

花烨
2023-12-01
org.activiti.engine.ActivitiOptimisticLockingException: 
Task[id=dgdfccc542755, name=申请人] 
was updated by another transaction concurrently
at org.activiti.engine.impl.db.DbSqlSession.flushUpdates(DbSqlSession.java:872) 

代码如下:

//更新Task
managementService.executeCommand(new SaveTaskCmd(task)); 

这个是由于在更新task时,参数task的版本rev_与数据库中的task版本不一致导致的,最终,这句执行的sql如下:

update ACT_RU_TASK
set
re_=4, name="申请人",//后面的设置省略
where id_="dgdfccc542755" and rev_=3; 

而此时,数据库中,该条task的rev_的值为4,与参数task的版本不一致,所以更新失败。
导致这个问题是因为:

先获取task,然后执行了task的签收或转发操作(这些都会更新task的信息),然后用开始获取的task去更新数据库,比如我在更新task前面执行了taskService.delegateTask,这部分代码为:

Task task = getTaskByTaskId(taskId); 
if(null=task)throw new Exception ("任务不存在"); 

taskService.delegateTask(taskId); 

task.setDescription("测试");
//更新Task
managementService.executeCommand(new SaveTaskCmd(task)); 
Task taskTemp = getTaskByTaskId(taskId); 
if(null= taskTemp)throw new Exception ("任务不存在"); 

taskService.delegateTask(taskId); 

Task task = getTaskByTaskId(taskId); 
task.setDescription("测试");

//更新Task
managementService.executeCommand(new SaveTaskCmd(task)); 

 

 类似资料:

相关阅读

相关文章

相关问答