2017-06-25 11 views
0

を元に戻すしない私は、私のDBの変更をロールバックしようとorg.springframework.jdbc DBのロールバックが状態

roollbackコードは、例外なく実行され、まだ私のDBは変更に汚れています。

私に何か不足していますか?そのコードと

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); 
     } 
    } 
} 
+0

なぜロールバックがコメントアウトされていますか?あなたのデータベースは何ですか?実際のコードは何を接続していますか?実行前と実行後の状態は何ですか?問題を再現した完全な最小例を投稿してください。あまりにも多くの未知数がここにあります。 –

+0

なぜロールバックはコメントアウトされていますか?それは私のために働かなかったので あなたのデータベースは何ですか? org.springframework.jdbc DBロールバックで状態が元に戻りません –

答えて

0

Rollbak最後のコミット以降のロールバックを行います。たとえば、明示的に@Transactionalを使用して暗黙的にコミットする可能性のあるコードがあり、ロールバックトランザクションはそれ以降のデータベーストランザクションでのみ有効です。

+0

私のコード 'rulesUiRepository.updateRulesUiSnapshot(this.nonSplittedRulesSnapshot)'の下にコミットを送信します.jdbscコードを深くラップします –

+0

コミット後にトランザクションをロールバックすることはできません。時には状態をロールバックする新しいアップデートを追加することができます – user7294900

関連する問題