Приведенный ниже код не работает для отката при возникновении каких-либо исключений при вставке записей в базу данных. Я использую фреймворк Spring 4 и аннотацию.Почему метод JDBCTEmplate.batchupdate (sql []) не откат в Spring4 с помощью аннотации @transaction?
*/Я использую ниже код для управления транзакциями, и он не откатится ни для какого исключения./
@Transactional(rollbackFor = RuntimeException.class)
public boolean insertBatch(List<String> query) throws SQLException {
boolean flag= false;
try
{
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String[] Sql= query.toArray(new String[query.size()]);
jdbcTemplate.batchUpdate(Sql);
flag=true;
}catch(DataAccessException e)
{
flag=false;
MessageResource.setMessages("Constraints Violation ! CSV data value not matched with database constraints ");
LOGGER.info("CSV file Data not expected as database table structure defination like constraint violation/Data Type lenght/NUll etc for same data value");
LOGGER.error("Cause for error: "+ e.getRootCause().getMessage());
LOGGER.debug("Details explain : "+ e.toString());
throw new RuntimeException("Roll back operation");
//transactionManager.rollback(status);
}
return flag;
}**
Я бы использовал простой пустой '@ Transactional' и просто перестроил исключение (' DataAccessException' является 'RuntimeException'), также вы теряете контекст (поскольку вы игнорируете исходное исключение) , Затем вместо создания собственного 'JdbcTemplate' вы должны ввести один (или хотя бы создать его один экземпляр). Наконец, убедитесь, что вы используете базу данных, которая поддерживает транзакции MySQL с таблицами MyISAM, например, не поддерживает транзакции. Мне также интересно, как этот метод вызывается, как если бы это внутренний вызов метода, '@ Transactional' бесполезен. –
Сэр, спасибо за предложение, но я не понимаю, что я здесь отсутствует. Просьба привести пример с помощью кода или модификации выше кода. Я буду вам очень благодарен. – user3656511
Что вы не понимаете? –