Не получавате BatchUpdateException
, защото може да използвате SQLErrorCodeSQLExceptionTranslator
в jdbcTemplate
, който обработва BatchUpdateException
s по специален начин
:
if (sqlEx instanceof BatchUpdateException && sqlEx.getNextException() != null) {
SQLException nestedSqlEx = sqlEx.getNextException();
if (nestedSqlEx.getErrorCode() > 0 || nestedSqlEx.getSQLState() != null) {
sqlEx = nestedSqlEx;
}
}
Има проблем с това:
Можете да смекчите това, ако използвате SQLStateSQLExceptionTranslator
:
jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator());
Тогава ще получите BatchUpdateException
като cause
:
try {
// ...
} catch (DataAccessException e) {
Throwable cause = e.getCause();
logger.info("cause instanceof BatchUpdateException = {}", cause instanceof BatchUpdateException);
}
Но имайте предвид, че в случай на драйвер postgresql jdbc BatchUpdateException#getUpdateCounts()
ще съдържа EXECUTE_FAILED
само въпреки факта, че някои редове могат да бъдат вмъкнати успешно.
Вижте това проблем