我正在使用 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数据源和事务管理器看起来行为正常。
答案 0 :(得分:0)
Nested Transactions可能是要走的路。
显然(根据DataSourceTransactionManager
嵌套事务需要使用SavePoint
机制。如果我理解Oracle Docs权限,你可以回滚外部事务,如果你的存储过程设置保存点。
但是如何让Spring了解你的SavePoint是我无法理解的。可能你必须在SQL中明确地调用它。
答案 1 :(得分:0)
我被告知离线,因为我们的procs充满了明确的COMMIT语句,我们无法轻松执行100%干净的回滚。 Bah欺骗。