gpt4 book ai didi

java - java测试中调用存储过程后可以回滚吗?

转载 作者:行者123 更新时间:2023-12-02 12:17:25 24 4
gpt4 key购买 nike

我在 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 statement那么您将只能回滚在此语句之后执行的任何操作。
  • 如果存储过程是 autonomous transaction那么它将独立于您的事务(并包含其自己的 COMMIT 语句),并且您无法将其回滚。

如果存储过程不包含 COMMIT 语句并且不是自治的,那么您应该能够将其回滚。

关于java - java测试中调用存储过程后可以回滚吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46051642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com