2017-09-05 1 views
0

je méthode dans la couche de DAO qui l'appel de procédure stockée dans la base de données Oracle:Puis-je restaurer après avoir appelé la procédure stockée dans le test Java?

@Override 
public void deleteNode(Integer nodeId) { 
    SqlParameterSource in = new MapSqlParameterSource() 
      .addValue("nodeId",nodeId) 
      .addValue("user", "DUMMY"); 

    SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(ebDataSource) 
      .withSchemaName("SCHEMA") 
      .withCatalogName("PK_GRAPH_DML") 
      .withProcedureName("DeleteNode"); 

    simpleJdbcCall.execute(in); 
} 

Et je dois tester cette méthode. Mais je veux annuler toutes les modifications après chaque exécution de ce test.

@Test 
@Transactional 
@Rollback 
public void deleteEBNode_ok() { 
    Integer nodeId = 5714; 

    ebFlowService.deleteEBNode(nodeId.toString()); 

    EBFlowToolSelect nodeModelFromDatabase = ebFlowService.getNodeById(nodeId); 
    Assert.assertNull(nodeModelFromDatabase.getNodeId()); 
} 

J'ai essayé de annoter mon test par @Transactional et @Rollback, mais il n'a pas aidé.
Est-il possible d'effectuer l'annulation de test de toutes les modifications apportées par la procédure stockée?

+1

Cela dépend de la procédure stockée. Si cela gère sa propre transaction, il n'y a pas grand chose à faire, sinon il devrait participer à une transaction et '@ Transactional' sur la méthode de test devrait être tout ce dont vous avez besoin. –

Répondre

0

Cela dépend de la procédure stockée. Si la procédure stockée contient un COMMIT statement, vous ne pourrez annuler que les actions effectuées après cette instruction.

  • Si la procédure stockée est autonomous transaction, elle sera indépendante de votre transaction (et contiendra sa propre instruction COMMIT) et vous ne pourrez pas la restaurer. Si la procédure stockée ne contient pas d'instruction COMMIT et qu'elle n'est pas autonome, vous devriez pouvoir la restaurer.