在查询当前用户的待办任务,包括本人就是处理人的或者还是候选人状态的任务时,方法为:
List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned(userId).
orderByTaskCreateTime().desc().list();
执行出现以下错误:
复制出来的完整sql为:
SELECT RES.*, VAR.ID_ as VAR_ID_, VAR.NAME_ as VAR_NAME_, VAR.TYPE_ as VAR_TYPE_, VAR.REV_ as VAR_REV_, VAR.PROC_INST_ID_ as VAR_PROC_INST_ID_, VAR.EXECUTION_ID_ as VAR_EXECUTION_ID_, VAR.TASK_ID_ as VAR_TASK_ID_, VAR.BYTEARRAY_ID_ as VAR_BYTEARRAY_ID_, VAR.DOUBLE_ as VAR_DOUBLE_, VAR.TEXT_ as VAR_TEXT_, VAR.TEXT2_ as VAR_TEXT2_, VAR.LONG_ as VAR_LONG_ FROM ( SELECT RES.* from ACT_RU_TASK RES WHERE (RES.ASSIGNEE_ = ? or ( RES.ASSIGNEE_ is null and exists(select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = RES.ID_ and LINK.TYPE_ = 'candidate' and (LINK.USER_ID_ = ? or )))) order by RES.CREATE_TIME_ desc ) RES left outer join ACT_RU_VARIABLE VAR ON RES.PROC_INST_ID_ = VAR.EXECUTION_ID_ order by RES.CREATE_TIME_ desc
可以看出以上方法执行的sql 缺失条件
后来查了一下,flowable api提供or语法的查询,修改方法如下:
TaskQuery query =taskService.createTaskQuery();
query.or().taskCandidateUser(userId).taskAssignee(userId).endOr();
List<Task> list = query.orderByTaskCreateTime().desc().list();
重点就是或条件要用.or()和.endOr()包裹住。