使用Spring Boot迭代列表时,我无法为每个项打开新事务。我想只回滚失败的项目并继续列表中的其余项目。一个事务中有多个提交,如果发生任何故障,所有提交都必须回滚。 我的服务代码如下。
sorted(mydict)
}
答案 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;
}