我在Hibernate / Spring应用程序中有很多测试。昨天,我将它们从使用Spring提供的JUnit 3.8基础测试类转换为JUnit 4.4基础测试类。
一切都很好,因为现在,我的测试包含在事务中,创建/修改的数据会自动回滚(而不是我编写代码来删除新创建的实体)。唯一的问题是我无法在测试执行期间窥视数据库。如果测试失败,我经常会在最后添加断点并通过SQL Yog与MySQL数据库对等以查看测试结果上。但现在,我只看到空桌子。 (我的意思是在集成测试中非常密切地模拟生产并实际触摸数据库。)
我尝试将全局隔离级别设置为未提交读取,但它没有改变我无法看到数据的事实。如何配置Spring / Hibernate以允许我查看来自另一个进程的数据?
答案 0 :(得分:1)
我遇到了同样的问题,发现在使用YOG时设置会话隔离级别有时会有所帮助。
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
这只发现了另一个令人不安的问题 - 在运行测试时,除非我在每次Hibernate操作后使用HibernateTemplate.flush();
,否则Hibernate实际上并没有运行某些操作。
由于这非常烦人,我终于设置了Hibernate所以它总是 flush 查询,如下所示:
HibernateTemplate hibernateTemplate;
...
hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_ALWAYS);