从事务测试中查看数据 - Hibernate + Spring + MySQL

时间:2011-04-15 11:21:38

标签: java mysql hibernate spring automated-tests

我在Hibernate / Spring应用程序中有很多测试。昨天,我将它们从使用Spring提供的JUnit 3.8基础测试类转换为JUnit 4.4基础测试类。

一切都很好,因为现在,我的测试包含在事务中,创建/修改的数据会自动回滚(而不是我编写代码来删除新创建的实体)。

唯一的问题是我无法在测试执行期间窥视数据库。如果测试失败,我经常会在最后添加断点并通过SQL Yog与MySQL数据库对等以查看测试结果上。但现在,我只看到空桌子。 (我的意思是在集成测试中非常密切地模拟生产并实际触摸数据库。)

我尝试将全局隔离级别设置为未提交读取,但它没有改变我无法看到数据的事实。如何配置Spring / Hibernate以允许我查看来自另一个进程的数据?

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,发现在使用YOG时设置会话隔离级别有时会有所帮助。

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

这只发现了另一个令人不安的问题 - 在运行测试时,除非我在每次Hibernate操作后使用HibernateTemplate.flush();,否则Hibernate实际上并没有运行某些操作。 由于这非常烦人,我终于设置了Hibernate所以它总是 flush 查询,如下所示:

HibernateTemplate hibernateTemplate;

... 

hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_ALWAYS);