Я пытаюсь удалить каждые 100 записей, прочитанных из файла в 3 таблицах, с помощью Spring JDBC Batch Delete. Если я обернуть логику в шаблоне транзакции, будет ли она работать, как ожидалось, например, скажем, я создаю 3 пакета из 300 записей и оборачивая логику внутри транзакции, будет ли транзакция откатывать 1-ю и 2-ю партию, если у 3-й партии возникла проблема. Мой код включен в вопрос для справки. Я пишу приведенный ниже код для достижения того, что я объяснил выше, мой код правильный?
TransactionTemplate txnTemplate = new TransactionTemplate(txnManager);
txnTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
public void doInTransactionWithoutResult(final TransactionStatus status) {
try {
deleteFromABCTable(jdbcTemplate, successList);
deleteFromDEFTable(jdbcTemplate, successList);
deleteFromXYZTable(jdbcTemplate, successList);
} catch (Exception e) {
status.setRollbackOnly();
throw e;
}
}
});
Мои методы удаления: -
private void deleteFromABCTable(JdbcTemplate jdbcTemplate, List
successList) {
try {
jdbcTemplate.batchUpdate(
"delete from ABC where document_id in (select document_id
from ABC where item in(?)))",
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i)
throws SQLException {
ps.setString(0, successList.get(i));
} });
} catch (Exception e) { }