簡體   English   中英

在Java測試中調用存儲過程后可以回滾嗎?

[英]Can I rollback after calling stored procedure in java test?

我在DAO層中有一個方法可以在Oracle數據庫中調用存儲過程:

@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注釋我的測試,但這沒有幫助。
是否可以使我的測試回滾存儲過程所做的所有更改?

這取決於存儲過程。

  • 如果存儲過程包含COMMIT語句,則您將只能回滾此語句之后執行的所有操作。
  • 如果存儲過程是一個自主事務,則它將獨立於您的事務(並包含其自己的COMMIT語句),並且您無法回滾它。

如果存儲過程不包含COMMIT語句並且不是自主的,則您應該能夠回滾它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM