2017-06-25 1 views
0

j'essaie de rollback mon changement de DBrollback org.springframework.jdbc DB ne revient pas à l'état

le code roollback fonctionne sans exception et pourtant mon DB est sale avec des changements.

Ai-je raté quelque chose?

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(); 
     } 
    } 

avec ce code:

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

Pourquoi la restauration est-elle mise en commentaire? Quelle est votre base de données? Quel est le code actuel chanter la connexion? Quel est l'état avant l'exécution et après? Publier un exemple minimal complet reproduisant le problème. Il y a beaucoup trop d'inconnues ici. –

+0

Pourquoi la restauration est-elle commentée? parce que ça n'a pas fonctionné pour moi Quelle est votre base de données? org.springframework.jdbc La restauration de la base de données ne rétablit pas l'état –

Répondre

0

RollBAK faire rollback depuis la dernière validation. Vous avez du code que vous n'avez pas affiché qui pourrait implicitement s'engager à utiliser @Transactional par exemple ou explicitement et la transaction rollback ne sera effective qu'après les transactions de base de données

+0

J'envoie commit sous mon code 'rulesUiRepository.updateRulesUiSnapshot (this.nonSplittedRulesSnapshot)' il enveloppe le code jdbsc au plus profond –

+0

Vous ne pouvez pas annuler la transaction après validation. parfois vous pouvez ajouter une nouvelle mise à jour qui annulera l'état – user7294900