Я работаю над требованием, когда мне нужно выполнить два разных пакетных обновления на основе ввода - одно batchUpdate для одного набора входов, выполняющих первое обновление;second batchUpdate для другого набора входов, выполняющих второе обновление.ниже приведен пример кода -
уровень службы -
performUpdate(List input) {
dao.performBatchUpdate1(<filteredInputList>);
dao.performBatchUpdate2(<filteredInputList>);
}
слой дао -
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)
}
}
}
Это работает нормально, за исключением случаев, когда в executeBatchUpdate2 есть какой-либо сбой,UpdateCounts выглядит так, чтобы содержать счетчики обеих операций batchUpdate, т.е. если первый метод вызывается с 3 входами, а второй вызывается с 4 входами.Если есть ошибка во втором методе в утверждении 2;печатается следующее -
Statement failed - 5
что я ожидаю -
Statement Failed - 2
Я использую весеннюю загрузку 1.5.6 с Oracle 11g.Я пытался поместить @Transactional на оба метода, но это тоже не сработало.Я застрял в этом в течение последних 3 дней;Любая помощь высоко ценится.