java - 在测试中不使用 @Transactional 从 HibernateTemplate 迁移到 SessionFactory

标签 java spring hibernate transactions integration-testing

我正致力于将 Spring 3 迁移到 Hibernate 4,这意味着我不能再使用 Spring 的 HibernateTemplate。重构代码非常简单(在使用 session 的地方用 sessionFactory.getCurrentSession() 替换回调)但是我的单元测试遇到了问题。特别是,我希望对我的 DAO 进行完全实时的集成测试——不使用 @Transactional。

但是,由于 HibernateTemplate 不再提供打开未打开 session 的方法,因此我得到“未找到当前线程的 session ”。当我运行我的测试时,因为 sessionFactory.getCurrentSession() 不会打开 session (如果 session 未打开)。

有什么方法可以解决这个问题,以复制 HibernateTemplate 提供给我的内容,而无需在我的测试中转而使用 @Transactional?看起来它应该是可能的,但我只能在我用 @Transactional 注释测试类时才能让测试工作(因为它确实打开了一个 session )。

最佳答案

如果使用 Junit 测试就非常简单。

在您的测试类中,您必须加载 Spring 上下文:

@BeforeClass
public static void createApplicationContext(){      
    try {           
         applicationContext = new ClassPathXmlApplicationContext(
                new String[] {"applicationContext.xml"});           
         yourDao = (YourDao)applicationContext.getBean("YourDao");           
    } catch (Exception e) {
        Assert.assertNull(e);
    }
}

然后你就可以使用yourDao并编写测试逻辑了。

关于java - 在测试中不使用 @Transactional 从 HibernateTemplate 迁移到 SessionFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14344058/

相关文章:

java - 如何为具有 Java Spring 安全性的用户授予权限

java - Spring 销毁ScopedBean?

java - 为什么是 NullPointerException?

java - Java equals 方法的良好设计

java - Eclipse e4 RCP 在插件之间访问服务

mysql - org.hibernate.exception.GenericJDBCException : could not insert

java - 如何在没有 AttributeConverter 或 customUserType 的情况下使用 Hibernate 5.2.10 MySQL JSON 支持来映射到 Java 实体类?

java - 如何提取json路径并查找数组长度?

java - 拦截 Controller 请求的问题

mysql - org.hibernate.MappingException : Unknown entity SessionFactoryImpl. getEntityPersister