我正在尝试使用Spring和DBunit(http://springtestdbunit.github.io/)
来测试我的代码进入单元测试后:
sessionFactory.getCurrentSession().createCriteria(MyEntity.class).list()
将返回由DBUnit插入的实体列表,因此它确实在teh数据库(MYSQL)中插入记录。
可是:
sessionFactory.openStatelessSession().createCriteria(MyEntity.class).scroll(FORWARD_ONLY).next()
将返回false!它无法使用无状态会话找到任何记录。
事先,我使用Liquibase插入相同的记录,这段代码完美无缺。
使用HSql更糟糕的是,它在尝试打开无状态会话时完全冻结...(在scroll()指令上...)
感谢您的帮助!
答案 0 :(得分:0)
OK!所以这实际上与DBunit无关,有点......
此代码简单显示相同的问题,并且没有DBUnit涉及:
MyEntity myEntity = new MyEntity ();
sessionFactory.getCurrentSession().save(myEntity );
assertEquals(1, sessionFactory.getCurrentSession().createCriteria(MyEntity .class).list()
.size());
assertTrue(sessionFactory.openStatelessSession().createCriteria(MyEntity .class)
.scroll(ScrollMode.FORWARD_ONLY).next());
第一个断言好,第二个失败。 所以我想这是一个简单的休眠问题,而且我还猜想liquibase正在采取措施以某种方式阻止它...可能是一个交易问题?
答案 1 :(得分:0)
SO!这似乎是一个简单的交易问题
sessionFactory.getCurrentSession().getTransaction().commit();
让测试变绿!
现在问题是如何让DBUnit提交我想要的事务......
在测试开始时,在DBUnit初始化之后,我运行:
sessionFactory.getCurrentSession().getTransaction().wasCommitted()
它返回false。这认为问题来自那里。
答案 2 :(得分:0)