我正在处理一个需要根据输入执行两个不同的批处理更新的需求-一个批处理更新用于一组执行第一次更新的输入;第二批对执行第二次更新的其他输入集进行更新。以下是示例代码-
服务层-
performUpdate(List input) {
dao.performBatchUpdate1(<filteredInputList>);
dao.performBatchUpdate2(<filteredInputList>);
}
dao层-
performBatchUpdate1(List inputList) {
String query = "update query1";
try
{
jdbcTemplate.batchUpdate(query, batchPreparedStatementSetter)
} catch(DataAccessException e) {
if(e.getCause() instanceof BatchUpdateException) {
int [] updateCounts = ((BatchUpdateException)e.getCause()).getUpdateCounts();
logger.error("Statement failed-"updateCounts.length+1)
}
performBatchUpdate2(List inputList) {
String query = "update query2";
try
{
jdbcTemplate.batchUpdate(query, batchPreparedStatementSetter)
} catch(DataAccessException e) {
if(e.getCause() instanceof BatchUpdateException) {
int [] updateCounts = ((BatchUpdateException)e.getCause()).getUpdateCounts();
logger.error("Statement failed-"updateCounts.length+1)
}
}
}
这正常工作,除非performBatchUpdate2中有任何故障。 updateCounts看起来包含两个batchUpdate操作的计数,即,如果第一个方法调用了3个输入,第二个方法调用了4个输入。语句2的第二种方法是否失败;以下正在打印-
Statement failed - 5
我期望的是-
Statement Failed - 2
我在Oracle 11g中使用Spring Boot 1.5.6。我尝试将@Transactional放在这两种方法上,但均无效。最近三天我一直被困在里面;非常感谢您的帮助。