2016-02-19 36 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是該查詢的參數對象。