Du får ikke BatchUpdateException
, fordi du måske bruger SQLErrorCodeSQLExceptionTranslator
i jdbcTemplate
, som håndterer BatchUpdateException
s på en særlig måde
:
if (sqlEx instanceof BatchUpdateException && sqlEx.getNextException() != null) {
SQLException nestedSqlEx = sqlEx.getNextException();
if (nestedSqlEx.getErrorCode() > 0 || nestedSqlEx.getSQLState() != null) {
sqlEx = nestedSqlEx;
}
}
Der er et problem om det:
Du kan afbøde dette, hvis du bruger SQLStateSQLExceptionTranslator
:
jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator());
Så får du BatchUpdateException
som en cause
:
try {
// ...
} catch (DataAccessException e) {
Throwable cause = e.getCause();
logger.info("cause instanceof BatchUpdateException = {}", cause instanceof BatchUpdateException);
}
Men Bemærk, at i tilfælde af postgresql jdbc driver BatchUpdateException#getUpdateCounts()
vil indeholde EXECUTE_FAILED
kun på trods af, at en række kunne indsættes med succes.
Se dette problem