Flowable 一些异常报错、注意事项(2)

本文档详细记录了Flowable在使用过程中的异常情况,包括NativeTaskQuery的错误排查,用户任务(UserTask)自定义元素数据结构的说明,ACT_RU_VARIABLE表字段长度限制的调整方法,以及Flowable数据库更新策略的解析。通过对查询API的分析,解决了原生查询SQL报错问题,同时提供了应对变量长度超限的解决方案,并探讨了不同数据库更新策略在不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录一:NativeTaskQuery

Flowable 中的查询有两种方式:查询API和原生(Native)查询

查询API例如:

taskService.createTaskQuery() .taskAssignee("aaa")

原生查询例如:

taskService.createNativeTaskQuery() .sql()

如果一开始对原生查询的sql怎么写不好把握,可以通过查询API的方式内部运行的sql,来改写或者组装。

例如通过下面查询历史任务记录的方法报错中提示的sql,来梳理查询历史记录所涉及的表关系

### The error may involve org.flowable.task.service.impl.persistence.entity.HistoricTaskInstanceEntityImpl.selectHistoricTaskInstancesByQueryCriteria-Inline
### The error occurred while setting parameters
### SQL: SELECT RES.*  from ACT_HI_TASKINST RES   WHERE  RES.ASSIGNEE_ = ?     and RES.ASSIGNEE_ is null   and EXISTS(select LINK.ID_ from ACT_HI_IDENTITYLINK LINK where LINK.TYPE_ = 'candidate' and LINK.TASK_ID_ = RES.ID_      and    (    LINK.USER_ID_ = ?       )         )          and     order by RES.START_TIME_ desc
### Cause: java.sql.SQLSyntaxErrorE

经过梳理,自己组装成原生查询所使用的sql可以是这样:

SELECT
  RES.* 
FROM
  ACT_HI_TASKINST RES 
WHERE
  RES.ASSIGNEE_ = '1'
  OR (
     RES.ASSIGNEE_ IS NULL 
    AND EXISTS (
    SELECT
      LINK.ID_ 
    FROM
      ACT_HI_IDENTITYLINK LINK 
    WHERE
      LINK.TYPE_ = 'candidate' 
      AND LINK.TASK_ID_ = RES.ID_ 
      AND ( LINK.USER_ID_ = '1' ) 
    ) 
  ) 
ORDER BY
  RES.START_TIME_ DESC

记录二:用户任务UserTask中自定义元素的数据结构

记录三:修改ACT_RU_VARIABLE表字段的长度限制

运行过程中一些变量存入了运行时变量表,变量对应的值在表中的字段是TEXT_,varchar(4000)

 源码中的建表语句是:

create table ACT_RU_VARIABLE (
    ID_ varchar(64) not null,
    REV_ integer,
    TYPE_ varchar(255) not null,
    NAME_ varchar(255) not null,
    EXECUTION_ID_ varchar(64),
    PROC_INST_ID_ varchar(64),
    TASK_ID_ varchar(64),
    SCOPE_ID_ varchar(255),
    SUB_SCOPE_ID_ varchar(255),
    SCOPE_TYPE_ varchar(255),
    BYTEARRAY_ID_ varchar(64),
    DOUBLE_ double,
    LONG_ bigint,
    TEXT_ varchar(4000),
    TEXT2_ varchar(4000),
    primary key (ID_)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin;

如果变量对应的值可能会超过4000,字段需要长度扩大点,可以用sql命令修改字段长度:

alter table act_ru_variable modify column TEXT_ varchar(8000) ;

alter table act_hi_varinst modify column TEXT_ varchar(8000) ;

不影响整体代码运行。

记录四:备记flowable数据库更新策略

database-schema-update
flase:       默认值。在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常。(生产环境常用)
true:       会对数据库中所有表进行更新操作。如果表不存在,则自动创建。(开发时常用)
create_drop: 在启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)。(单元测试常用)
drop-create: 在启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值