Anda tidak mendapatkan BatchUpdateException
, karena Anda mungkin menggunakan SQLErrorCodeSQLExceptionTranslator
di jdbcTemplate
, yang menangani BatchUpdateException
s dengan cara khusus
:
if (sqlEx instanceof BatchUpdateException && sqlEx.getNextException() != null) {
SQLException nestedSqlEx = sqlEx.getNextException();
if (nestedSqlEx.getErrorCode() > 0 || nestedSqlEx.getSQLState() != null) {
sqlEx = nestedSqlEx;
}
}
Ada masalah tentang itu:
Anda dapat mengurangi ini, jika Anda menggunakan SQLStateSQLExceptionTranslator
:
jdbcTemplate.setExceptionTranslator(new SQLStateSQLExceptionTranslator());
Kemudian Anda akan mendapatkan BatchUpdateException
sebagai cause
:
try {
// ...
} catch (DataAccessException e) {
Throwable cause = e.getCause();
logger.info("cause instanceof BatchUpdateException = {}", cause instanceof BatchUpdateException);
}
Tapi perhatikan bahwa dalam kasus driver jdbc postgresql BatchUpdateException#getUpdateCounts()
akan berisi EXECUTE_FAILED
saja, meskipun faktanya beberapa baris berhasil dimasukkan.
Lihat ini masalah