несколько пакетных запросов в шаблоне транзакции - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь удалить каждые 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) { } 
...