DBUnit与hibernate statelessSession的问题

时间:2015-04-16 08:48:32

标签: spring hibernate dbunit spring-test-dbunit

我正在尝试使用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()指令上...)

感谢您的帮助!

3 个答案:

答案 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)