Activiti 用户指南(查询API)

查询API

有两种方法可以从引擎查询数据:查询API和原生查询。查询API允许使用流利的API编写完全类型安全的查询,你可以向查询中添加各种条件(所有条件都作为逻辑AND一起应用),也可以仅添加一个顺序,以下代码显示了一个示例:

List tasks = taskService.createTaskQuery()
    .taskAssignee("kermit")
    .processVariableValueEquals("orderId", "0815")
    .orderByDueDate().asc()
    .list();

有时你需要更强大的查询,例如使用OR运算符的查询或使用查询API无法表达的限制,对于这些情况,引入了原生查询,使你可以编写自己的SQL查询。返回类型由你使用的Query对象定义,数据被映射到正确的对象中,例如TaskProcessInstanceExecution等....由于查询将在数据库中触发,因此你必须使用数据库中定义的表名和列名,这需要一些有关内部数据结构的知识,建议谨慎使用原生查询,可以通过API检索表名,以使依赖性尽可能小。

List tasks = taskService.createNativeTaskQuery()
  .sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T WHERE T.NAME_ = #{taskName}")
  .parameter("taskName", "gonzoTask")
  .list();

long count = taskService.createNativeTaskQuery()
  .sql("SELECT count(*) FROM " + managementService.getTableName(Task.class) + " T1, "
    + managementService.getTableName(VariableInstanceEntity.class) + " V1 WHERE V1.TASK_ID_ = T1.ID_")
  .count();

你可能感兴趣的:(activiti)