当前位置: 首页 > 知识库问答 >
问题:

hibernate无状态会话的DBUnit问题

陶元凯
2023-03-14

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

一旦进入单元测试:

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

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

但是:

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

返回false!它无法使用无状态会话找到任何记录。

之前,我使用Liquibase插入相同的记录,这段代码工作得很好。

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

谢谢你的帮助!

共有3个答案

班景龙
2023-03-14

问题解决了!多亏了这一点:https://tadaya.wordpress.com/2008/04/27/transaction-aware-datasource-use-dbunit-hibernate-in-spring/

郭炳
2023-03-14

所以!这似乎最终是一个简单的交易问题

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

让测试变成绿色!

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

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

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

它返回false。这就是问题的根源。

谢昂雄
2023-03-14

好啊所以这实际上与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在某种程度上阻止了它。。。可能是交易问题?

 类似资料:
  • 需要一些帮助!!我对Drools中的有状态和无状态会话没有清晰的理解。我正在努力理解这一点,所以尝试了一个例子。 我在drools6.5版本上使用有状态和无状态会话测试了下面的drl,在这两种情况下都得到了相同的输出。根据我对无状态会话的理解,它应该只执行第一条规则,当应用程序对象在第一条规则中被修改时,第二条规则不应该被激活(“有效期”)。附加源代码。感谢您在这方面的帮助。

  • Drools中无状态会话和有状态会话的区别是什么。我浏览了不同的文件,发现下面 无状态会话执行规则时事实的任何更改都不会被规则引擎察觉,因此如果任何规则被修改,则不会发生其他规则的重新激活。 我试图执行下面的规则,发现了相同的结果

  • 我是EJB的新手,最近开始研究EJB(3.0)。我已经使用Java6年了,但以前从未使用过EJB。至少可以说,整个EJB业务的复杂性让我不知所措。我不明白我可以在哪里实际应用一些概念。 在理解无状态会话bean后,我想到的一个问题是,你能不能不要总是用一个没有本地成员的类的共享实例来替换无状态会话bean(实际上使其无状态)?我了解到正在为无状态会话bean进行实例池。如果没有状态,就不能简单地使

  • 对于有状态会话bean(SFSB)和无状态会话bean(SLSB)的用法,我有点困惑。 我知道SFSB与客户保持状态。这很有帮助:什么时候使用有状态会话bean而不是无状态会话bean? 这里和许多其他地方提供的示例是SFSB的购物车。 “如果一个任务需要一系列方法调用(不止一次),并且您需要保留以前的结果以在下一次调用中使用它们,那么就可以使用SFSB”--Source。这将更像是签出(页面之间

  • 问题内容: 有状态会话Bean定义如下: 有状态会话Bean对象的状态由其实例变量的值组成。在有状态会话Bean中,实例变量代表唯一的客户端Bean会话的状态。因为客户端与其bean进行交互(“交谈”),所以这种状态通常称为对话状态。 无状态会话Bean定义如下: 无状态会话Bean无状态会话Bean不会与客户端保持对话状态。当客户端调用无状态Bean的方法时,该Bean的实例变量可能包含特定于该

  • 问题内容: 尝试将新条目插入到“多对多”关联表时,出现此错误:我可以理解,这是与getSession()和session.close()处理的事情 但我无法弄清楚。对于每笔交易,我都会创建一个新会话。但是我在用户注销时关闭了所有会话。即:创建一个hibernate会话并将其与HttpSession绑定。然后我在用户注销中销毁它。 处理此问题后,有时会出现错误。 由于未正确打开和关闭会话,所有这些错