【问题标题】:DBUnit issue with hibernate statelessSession休眠 statelessSession 的 DBUnit 问题
【发布时间】:2015-04-16 08:48:32
【问题描述】:

我正在尝试使用 Spring 和 DBunit (http://springtestdbunit.github.io/) 测试我的代码

一旦进入单元测试:

sessionFactory.getCurrentSession().createCriteria(MyEntity.class).list()

将返回由 DBUnit 插入的实体列表,因此它确实在数据库 (MYSQL) 中插入了记录。

但是:

sessionFactory.openStatelessSession().createCriteria(MyEntity.class).scroll(FORWARD_ONLY).next()

将返回错误!使用无状态会话找不到任何记录。

之前,我使用 Liquibase 插入相同的记录,这段代码运行良好。

使用 HSql 更糟糕的是,它在尝试打开无状态会话时完全冻结...(在 scroll() 指令上...)

感谢您的帮助!

【问题讨论】:

    标签: spring hibernate dbunit spring-test-dbunit


    【解决方案1】:

    好的!所以这实际上与 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 正在做一些事情以某种方式阻止它......可能是事务问题?

    【讨论】:

      【解决方案2】:

      所以!简单的说到底好像是个交易问题

      sessionFactory.getCurrentSession().getTransaction().commit();
      

      让测试变成绿色!

      现在的问题是如何让 DBUnit 提交我想的事务...

      测试开始,DBUnit初始化后,我运行:

      sessionFactory.getCurrentSession().getTransaction().wasCommitted()
      

      它返回 false。这认为问题出在那儿。

      【讨论】:

        【解决方案3】:
        猜你喜欢
        • 2012-09-17
        • 1970-01-01
        • 1970-01-01
        • 2014-08-22
        • 2015-06-10
        • 1970-01-01
        相关资源
        最近更新 更多