activiti工作问题记录:org.activiti.engine.ActivitiException: Query return 2 results instead of max 1

activiti工作问题记录:org.activiti.engine.ActivitiException: Query return 2 results instead of max 1


问题截图:
在这里插入图片描述

原因分析: 数据库存在两条业务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存在多条数据,这个不太合理。希望有经验的同学解惑一下。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值