You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring4集成Hibernate5.2(从Hibernate4迁移)Tomcat启动失败如何解决

Hibernate4迁移至Hibernate5.2+Spring4启动失败配置问题排查

以下是你配置中的典型错误及修复方案:

  • 包引用错误:Hibernate5对应的LocalSessionFactoryBean和HibernateTransactionManager必须使用org.springframework.orm.hibernate5包下的类,不能继续使用hibernate4包下的旧实现,这是迁移时最常见的遗漏点。
  • 缺少Hibernate方言配置:你使用的是MySQL8的com.mysql.cj.jdbc.Driver驱动,Hibernate5不会默认推断数据库方言,必须显式配置对应方言属性。
  • 事务管理器注入方式错误:直接调用getSessionFactory().getObject()会导致SessionFactory重复初始化,正确做法是将SessionFactory作为参数传入事务管理器的Bean方法,由Spring自动注入已经实例化完成的SessionFactory单例。
  • Spring版本兼容性问题:Hibernate5.2最低要求Spring 4.3.x及以上版本,如果你的Spring版本低于4.3,会出现类不兼容的启动错误。
  • 依赖缺失:Hibernate5的c3p0连接池实现已经从核心包中拆分出来,需要单独引入对应版本的hibernate-c3p0依赖,否则Hibernate无法加载c3p0连接池,启动报错。
  • JDBC连接参数缺失:MySQL8的cj驱动要求配置时区参数,否则会抛出连接异常。

修正后的配置代码如下:

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = { "com.social.*","com.*" })
public class HBConfig {

   @Bean
   public LocalSessionFactoryBean getSessionFactory() {
      // 注意此处使用的是hibernate5包下的LocalSessionFactoryBean
      LocalSessionFactoryBean factoryBean = new LocalSessionFactoryBean();

      Properties props = new Properties();
      // 设置JDBC属性
      props.put("hibernate.connection.driver_class", "com.mysql.cj.jdbc.Driver");
      props.put("hibernate.connection.url", "jdbc:mysql://localhost:3306/socialdev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false");
      props.put("hibernate.connection.username", "root");
      props.put("hibernate.connection.password","123");

      // 新增必选的方言配置
      props.put("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect");
      // 设置Hibernate属性
      props.put("hibernate.show_sql", true);
      props.put("hibernate.hbm2ddl.auto", "update");

      // 设置C3P0连接池属性
      props.put("hibernate.c3p0.min_size", 5);
      props.put("hibernate.c3p0.max_size", 20);
      props.put("hibernate.c3p0.acquire_increment", 1);
      props.put("hibernate.c3p0.timeout", 1800);
      props.put("hibernate.c3p0.max_statements", 150);

      factoryBean.setHibernateProperties(props);
      factoryBean.setPackagesToScan("com.social.entity");

      return factoryBean;
   }

   @Bean
   public HibernateTransactionManager getTransactionManager(SessionFactory sessionFactory) {
      // 注意此处使用的是hibernate5包下的HibernateTransactionManager
      HibernateTransactionManager transactionManager = new HibernateTransactionManager();
      // 直接注入Spring托管的sessionFactory实例,不需要手动调用getObject
      transactionManager.setSessionFactory(sessionFactory);
      return transactionManager;
   }
}

内容的提问来源于stack exchange,提问作者deepak mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 13:21:01