我在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
对我的测试进行注释,但它没有帮助。
是否可以让我的测试回滚存储过程所做的所有更改?
答案 0 :(得分:1)
这取决于存储过程。
COMMIT
statement,那么您将只能回滚在此声明后执行的任何操作。COMMIT
语句),您无法将其回滚。如果存储过程不包含COMMIT
语句且不是自治的,那么您应该能够将其回滚。