org.springframework.jdbc Откат БД не восстанавливает состояние

Я пытаюсь откатить изменения моей БД

код отката выполняется без исключений, и все же моя БД загрязнена изменениями.

Я что-то пропустил?

    final Connection dbConnection = rulesUiRepository.getConnection();
    dbConnection.setAutoCommit(false);
    try {

        if (rulesUiRepository.updateRulesUiSnapshot(this.nonSplittedRulesSnapshot) == -1)
            throw new RuntimeException("cannot save ui snapshot to DB");

       ...more code

    } catch (Exception e) {
        logger.error("transaction to update db and cofman failed", e);

        //did work
        //dbConnection.rollback();

        throw new Exception("transaction to update db and cofman failed", e);

    } finally {
        //or
        if (dbConnection != null) {
            dbConnection.close();
        }
    }

с этим кодом:

public synchronized void rollback() throws SQLException {
    try {
        this.txn_known_resolved = true;
        this.inner.rollback();
    } catch (NullPointerException var2) {
        if(this.isDetached()) {
            throw SqlUtils.toSQLException("You can't operate on a closed Connection!!!", var2);
        } else {
            throw var2;
        }
    } catch (Exception var3) {
        if(!this.isDetached()) {
            throw this.parentPooledConnection.handleThrowable(var3);
        } else {
            throw SqlUtils.toSQLException(var3);
        }
    }
}

1 ответ

Rollbak сделать откат с момента последнего коммита. У вас есть код, который вы не показывали, который может выполнять неявную фиксацию, например, с помощью @Transactional или явно, и транзакция отката будет действовать только для транзакций базы данных после нее.

Другие вопросы по тегам