2016-02-19 384 views
0

虽然按照此文档和示例https://docs.camunda.org/manual/7.3/real-life/how-to/#process-engine-custom-queries-custom-mybatis-queries,请您解释我们如何执行插入查询?在示例中列出它们在以下方法中使用的值。 ()“selectTasksForRegion”,region,0,100);Camunda自定义插入查询

但是commandContext.getDbSqlSession()。insert是一个受保护的方法,因此我无法从中获取插入查询。感谢任何建议。

回答

1

DbEntityManager有一个 insert 方法。插入和更新不是由DbSqlSession基于DbEntity的 getPersistantState 来管理的。您只需提供 前缀为insertupdate的对应映射。例如,请参阅内置的 实体。

+0

谢谢塞巴斯蒂安。所以假设我有一个名为propsEntity的实体类,如果我调用以下代码,commandContext.getDbEntityManager.update(PropsEntity.class,“updatePropsEntity”,props);然后在我的映射文件中我有更新$ {前缀}表名称,它会正确吗? – user2894296

+1

这取决于例如看[Task.xml](https://github.com/camunda/camunda-bpm-platform/blob/master/engine/src/main/resources/org/camunda/bpm/engine/ impl/mapping/entity/Task.xml#L59-L103)映射。它有两个更新语句'updateTask'和'updateTaskSuspensionStateByParameters'。如果TaskEntity在刷新时变脏,第一个会自动由DbSqlSession调用。第二个由[TaskManager]明确调用(https://github.com/camunda/camunda-bpm-platform/blob/master/engine/src/main/java/org/camunda/bpm/engine/impl/持久性/实体/ TaskManager.java#L164-L191)。 –

0

在底层的MyBatis SqlSession对象中,你会发现你需要的东西。你只需要浏览一个更深一层:commandContext.getDbSqlSession().getSqlSession()

整条生产线看起来是这样的:

commandContext.getDbSqlSession().getSqlSession().insert("insertStuff", stuff); 

随着insertStuff作为您的自定义查询的名称和stuff是该查询的参数对象。