使用Spting MVC为列表中的每个项打开新事务

时间:2018-04-27 19:24:14

标签: spring-mvc spring-transactions

使用Spring Boot迭代列表时,我无法为每个项打开新事务。我想只回滚失败的项目并继续列表中的其余项目。一个事务中有多个提交,如果发生任何故障,所有提交都必须回滚。 我的服务代码如下。

sorted(mydict)

}

2 个答案:

答案 0 :(得分:0)

UpdateIntent已经在另一个类中:IntentImportExportService作为资源注入调用者,所以问题不存在...... 您确定所选的事务管理器是否支持嵌套事务?

答案 1 :(得分:0)

我通过在for循环中添加try catch来解决这个问题,如下所示

 @Transactional
public Map<String, Integer> createOrUpdateIntent(ExportImportData exportImportData,boolean overwrite) {
    List<Intent> intentsList = exportImportData.getIntents();
    Map<String,Entity> entityMap = getEntityMap(exportImportData.getEntityList());
    Map<String,Api> apiMap = getApiMap(exportImportData.getApiList());
    Map<String,Integer> statisticsMap = new HashMap<>();
    Long domainId = ExcelUtil.getDomainId(exportImportData.getDomainName());
    for(Intent intent : intentsList) {
        try {
            Intent existingIntent = intentExists(intent.getIntentNm());
            if (existingIntent != null) {
                intentExportImportService.updateIntent(intent, existingIntent, entityMap, apiMap, overwrite, statisticsMap, domainId);
            } else {
                intentExportImportService.createIntent(intent, entityMap, apiMap, overwrite, statisticsMap, domainId);
            }
        } catch (DataAccessLayerException e) {
            updateStatisticsMap(FAILED,statisticsMap);
            LOGGER.error("Error Importing Intents to update and hence rolling back intent: "+intent.getIntentNm());
        }
    }
    return statisticsMap;
}