spring boot 1.5.1.RELEASE 问题与休眠会话工厂创建有关

Posted

技术标签:

【中文标题】spring boot 1.5.1.RELEASE 问题与休眠会话工厂创建有关【英文标题】:spring boot 1.5.1.RELEASE issue with hibernate session factory creation 【发布时间】:2017-02-04 17:01:11 【问题描述】:

创建 Hibernate SessionFactory 时出错

org.springframework.transaction.CannotCreateTransactionException:无法为事务打开 Hibernate Session;嵌套异常是 java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext

我的 POM 文件

============

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>

SessionFactory 就是这样创建的

@Bean
  public LocalSessionFactoryBean sessionFactory() 
    LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
    sessionFactoryBean.setDataSource(dataSource());
    sessionFactoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
    Properties hibernateProperties = new Properties();
    hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT);
    hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL);
    hibernateProperties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO);
    sessionFactoryBean.setHibernateProperties(hibernateProperties);

    return sessionFactoryBean;
  

【问题讨论】:

验证您的类路径中是否有正确的 hibernate 版本,并且您没有冲突的版本,当各种 spring 模块依赖或引入不同的传递依赖时,可能会发生这种情况。 你的 pom 似乎没问题,我认为你缺少 transactionManager 配置尝试添加 HibernateTransactionManager LocalSessionFactoryBean的封装是什么?并向我们​​展示 TransactionManager 创建方法.. 使用导入 这是 Spring 和 Hibernate 版本之间的冲突问题。我正在使用 org.springframework.orm.hibernate4.*; ,现在我把版本改成了org.springframework.orm.hibernate5.*; .问题已解决。但这不是 Spring Boot 中的错误,我们没有在 pom.xml 文件中提供任何依赖版本详细信息。 【参考方案1】:

解决方案是导入org.springframework.orm.hibernate5.*;

【讨论】:

以上是关于spring boot 1.5.1.RELEASE 问题与休眠会话工厂创建有关的主要内容,如果未能解决你的问题,请参考以下文章

springboot+mybatis HelloWorld示例

Spring Boot 学习例子

Spring Boot 2Spring Boot CLI

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》

spring-boot-quartz, 依赖spring-boot-parent