diff --git a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/HistoricTaskInstanceEntityManager.java b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/HistoricTaskInstanceEntityManager.java index f0d14024cc6..4eb799913a5 100644 --- a/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/HistoricTaskInstanceEntityManager.java +++ b/modules/activiti-engine/src/main/java/org/activiti/engine/impl/persistence/entity/HistoricTaskInstanceEntityManager.java @@ -101,12 +101,22 @@ public HistoricTaskInstanceEntity findHistoricTaskInstanceById(String taskId) { return null; } + @SuppressWarnings("unchecked") + public List findHistoricTasksByParentTaskId(String parentTaskId) { + return getDbSqlSession().selectList("selectHistoricTasksByParentTaskId", parentTaskId); + } + public void deleteHistoricTaskInstanceById(String taskId) { if (getHistoryManager().isHistoryEnabled()) { HistoricTaskInstanceEntity historicTaskInstance = findHistoricTaskInstanceById(taskId); - if(historicTaskInstance!=null) { + if (historicTaskInstance != null) { CommandContext commandContext = Context.getCommandContext(); + List subTasks = findHistoricTasksByParentTaskId(taskId); + for (HistoricTaskInstance subTask: subTasks) { + deleteHistoricTaskInstanceById(subTask.getId()); + } + commandContext .getHistoricDetailEntityManager() .deleteHistoricDetailsByTaskId(taskId); diff --git a/modules/activiti-engine/src/main/resources/org/activiti/db/mapping/entity/HistoricTaskInstance.xml b/modules/activiti-engine/src/main/resources/org/activiti/db/mapping/entity/HistoricTaskInstance.xml index c0395011477..55a6a84a426 100644 --- a/modules/activiti-engine/src/main/resources/org/activiti/db/mapping/entity/HistoricTaskInstance.xml +++ b/modules/activiti-engine/src/main/resources/org/activiti/db/mapping/entity/HistoricTaskInstance.xml @@ -265,6 +265,10 @@ select * from ${prefix}ACT_HI_TASKINST where ID_ = #{historicTaskInstanceId, jdbcType=VARCHAR} + +