2015-04-16 42 views
1

我试图测试使用Spring和DBUnit的(http://springtestdbunit.github.io/DBUnit的问题与Hibernate statelessSession

一旦单元测试里面我的代码:

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

将返回DBUnit的插入实体的名单,所以它确实在数据库(MYSQL)中插入了记录。

但是:

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

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

之前,我使用Liquibase插入相同的记录,并且这段代码完美地工作。

使用HSQL它甚至更糟,它当试图打开无状态会话...完全冻结(上滚动()指令...)

谢谢您的帮助!

回答

0

好!所以实际上什么都没有做用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正在做某件事来防止它......可能是一个交易问题?

0

SO!这似乎是在最后一个交易问题,因为一个简单的

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

使测试走向绿色!

现在的问题是,如何让DBUnit的承诺,我想交易...

在测试开始时,DBUnit的初始化之后,我跑:

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

它返回false。这认为问题来自那里。