在运行JUnit测试后进行的数据库更改不可见

时间:2016-02-23 10:59:11

标签: java database spring junit

我正面临以下问题。

我使用Spring和JUnit以及Oracle数据库。

我的测试标有@Transactional注释。

当我运行一个执行某些插入操作的测试时,我在其末尾的某处放置了一个断点,如果我进入我的数据库并查看这些更改,则它们不在那里。

有什么理由发生这种情况吗?

我真正在做的是我有batchUpdate()插入我的所有条目。当批处理完成时,我有几个断言来测试我刚刚添加的数据。在这种情况下,测试通过。在其中一个断言上设置一个断点并进入我的数据库并试图查看这些数据不会给我任何东西。

我的测试配置为使用此数据库运行,因为没有@Transactional注释,数据在数据库中的表中可见。

我希望自己足够清楚。

1 个答案:

答案 0 :(得分:1)

@Transactional在触发方法时启动事务。事务中执行的事务平均操作在其他事务中不可见,并且在提交之前不会应用于数据库。 执行你的方法后会发生提交,这就是为什么你不能看到任何更新,如果你在执行过程中断点。

请阅读transaction的工作原理。