将AbstractTransactionalJUnit4SpringContextTests与Oracle Procs一起使用哪个COMMIT

时间:2011-01-17 11:45:04

标签: java oracle spring testing junit

我正在使用 AbstractTransactionalJUnit4SpringContextTests 来运行一个简单的测试:

public class MyTests extends AbstractTransactionalJUnit4SpringContextTests
{
    @Test
    public void simpleProcTest()
    {
        simpleJdbcTemplate.update("BEGIN p_dummy_commit; END;");
    }
}

提到的proc执行简单的表更新然后执行COMMIT。

问题是,这个虚拟进程所做的更改不会像我希望的那样回滚。

背景:我们有一个大型应用程序,它有很多执行此操作的proc,我试图找出如何以回滚方式测试这些,尽管它们包含显式COMMIT语句。< / p>

我希望利用事务嵌套功能,我认为我可能会使用这个Spring超类“免费”获得。看来我不是。

任何人都知道如何实现这一目标?

当我在proc之外执行SQL UPDATE时,我已经确认回滚成功,因此我的Spring数据源和事务管理器看起来行为正常。

2 个答案:

答案 0 :(得分:0)

Nested Transactions可能是要走的路。

显然(根据DataSourceTransactionManager嵌套事务需要使用SavePoint机制。如果我理解Oracle Docs权限,你可以回滚外部事务,如果你的存储过程设置保存点。

但是如何让Spring了解你的SavePoint是我无法理解的。可能你必须在SQL中明确地调用它。

答案 1 :(得分:0)

我被告知离线,因为我们的procs充满了明确的COMMIT语句,我们无法轻松执行100%干净的回滚。 Bah欺骗。