2017-09-05 33 views
0

我在DAO層方法,其調用存儲在Oracle數據庫的過程:在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); 
} 

我不得不測試此方法。但是我想在每次執行此測試後回滾所有更改。

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

    ebFlowService.deleteEBNode(nodeId.toString()); 

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

我試圖通過@Transactional@Rollback註釋我的測試,但它並沒有幫助。
是否有可能使我的測試回滾存儲過程所做的所有更改?

+1

這取決於存儲過程。如果它管理自己的事務,那麼你可以做的事情不多,否則它應該參與一個事務,並且測試方法上的'@ Transactional'應該是你所需要的。 –

回答

0

這取決於存儲過程。

  • 如果存儲過程包含COMMIT statement那麼您將只能回滾此語句後採取的任何操作。
  • 如果存儲過程是autonomous transaction,那麼它將獨立於您的事務(並且包含它自己的COMMIT語句),並且無法將其還原。

如果存儲過程不包含COMMIT語句並且不是自治的,那麼您應該能夠將其回滾。

相關問題