Java Spring/Hibernate/TestNG-手动会话和事务设置

Java Spring/Hibernate/TestNG-手动会话和事务设置,java,hibernate,unit-testing,spring,testng,Java,Hibernate,Unit Testing,Spring,Testng,我正在尝试为使用普通Hibernate API的DAO类创建一个测试用例(没有像HibernateTemplate、HibernateDataOSupport这样的Spring内容),如下所示: sessionFactory.getCurrentSession().save(obj); 我在spring上下文中有适当的sessionFactory和transactionManager定义,如spring文档中所示 我想要的是在启动代码中打开一个事务,并在最后回滚 因此,这不同于默认的Sprin

我正在尝试为使用普通Hibernate API的DAO类创建一个测试用例(没有像HibernateTemplate、HibernateDataOSupport这样的Spring内容),如下所示:

sessionFactory.getCurrentSession().save(obj);
我在spring上下文中有适当的sessionFactory和transactionManager定义,如spring文档中所示

我想要的是在启动代码中打开一个事务,并在最后回滚

因此,这不同于默认的Spring单元测试,它支持每个测试方法调用的事务概念,因此我无法扩展AbstractTransactionalTestNGSpringContextTests

我需要一种方法来启动事务,并以某种方式将其输入会话工厂。我觉得这应该是非常容易,但无法实现后,大量的阅读和实验


非常感谢您的帮助。

如果您不想使用
HibernateTemplate
,您可以直接使用
transactionManager
,如中所述。

@Transactional(readOnly=false,传播=propagation.REQUIRED)


使用上面的注释测试方法实际上我不能使用它,因为我的DAO使用内部sessionFactory.getCurrentSession()。所以我需要一种方法来“保存”会话和相关事务。在生产环境中,我在服务层使用spring声明性事务,所有事情对我来说都是透明的。但在测试中,我需要手动处理这个“透明度”@m17啊,我明白了,我想我并没有把你们的问题看透。在DAO中,我通常创建getSession()和setSession()方法,以便使用DAOIC。因此,在我的junit测试中,我创建了会话(有或没有事务),并将其设置在DAO上。是的,这是我想要做的,但我需要以某种方式将其与Hibernate会话耦合,这是我的难点。@m17:如果您正确配置了
HibernateTransactionManager
,它应该自动耦合,据我所知,这将在单独的事务中包含每个方法。如果没有引发异常,它将提交此事务?。
try {
  Session session = factory.openSession();
  Transaction tx = session.beginTransaction();
  ...
  tx.commit();
  session.close();
} catch (SomeException e) {
  tx.rollback();
  ...
}