activiti工作问题记录:org.activiti.engine.ActivitiException: Query return 2 results instead of max 1
问题截图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2e70b5430b104114850fc0017bd16217.png)
原因分析: 数据库存在两条业务Id相同历史数据,导致查询结果大于1条。
问题代码:
HistoricProcessInstanceQuery historicProcessInstanceQuery = historyService.createHistoricProcessInstanceQuery();
historicProcessInstanceQuery.processDefinitionKey(instanceKey);
historicProcessInstanceQuery.processInstanceBusinessKey(businessKey);
HistoricProcessInstance historicProcessInstance = historicProcessInstanceQuery.singleResult();
工作流运行对应的SQL(帮助排除出错数据):
SELECT DISTINCT
RES.*,
DEF.KEY_ AS PROC_DEF_KEY_,
DEF.NAME_ AS PROC_DEF_NAME_,
DEF.VERSION_ AS PROC_DEF_VERSION_,
DEF.DEPLOYMENT_ID_ AS DEPLOYMENT_ID_
FROM
ACT_HI_PROCINST RES
LEFT OUTER JOIN ACT_RE_PROCDEF DEF ON RES.PROC_DEF_ID_ = DEF.ID_
WHERE
DEF.KEY_ = '流程key'
AND RES.BUSINESS_KEY_ = '业务id'
ORDER BY
RES.ID_ ASC
解决思路:
每一个开启的流程应对应唯一的业务Id,删除出错数据,查看具体生成业务Id的方法,保证生成业务id唯一
查找其他的文章也提供了一个解决思路,将原本的获取一条变为获取多条:
historicProcessInstanceQuery.singleResult() 修改为:List list = historicProcessInstanceQuery.list();
这个方案,我感觉不太合理,因为每一个业务流程应当保证唯一,同一个业务id存在多条数据,这个不太合理。希望有经验的同学解惑一下。