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

升级Hibernate/Spring依赖时遇JpaIntegrator缺失的ServiceConfigurationError

解决Hibernate升级后JpaIntegrator找不到的ServiceConfigurationError问题

我之前处理过好几起类似的依赖升级踩坑案例,你遇到的这个报错本质是Hibernate的JPA集成类JpaIntegrator在类路径中找不到,核心原因通常是依赖缺失、模块版本不匹配或者依赖冲突导致的类加载失败。下面是一步步的排查和解决方法:

1. 先确认Hibernate模块的版本一致性

Hibernate 5.2及以后的版本已经把hibernate-entitymanager模块的功能合并到hibernate-core里了,如果你之前的项目还在单独引入hibernate-entitymanager,很可能会和新版hibernate-core产生冲突,导致JpaIntegrator类要么重复存在要么缺失。

  • 检查你的依赖配置(Maven pom.xml或Gradle build.gradle),确保只引入**hibernate-core**,移除旧的hibernate-entitymanager依赖。
  • 确保所有Hibernate相关模块(比如hibernate-commons-annotations、hibernate-jpa-api等)的版本和你指定的hibernateVersion完全一致,避免混合不同版本。

2. 检查Spring ORM与Hibernate的版本兼容性

虽然你试过Spring 5.1.6 + Hibernate 5.4.2,但还是要确认版本是否匹配:

  • Spring 4.3.x系列官方最高支持到Hibernate 5.2.x,如果你用Spring 4.3.20搭配Hibernate 5.4.x,大概率会有兼容性问题(比如Spring ORM的Hibernate封装类和新版Hibernate的API不匹配)。
  • 建议使用Spring 5.1+ 搭配 Hibernate 5.4.x,或者Spring 4.3.x搭配Hibernate 5.2.x,先把版本对齐到官方兼容的组合再测试。

3. 清理依赖树中的冲突依赖

很多时候问题出在间接依赖的旧版本Hibernate模块上,比如Spring依赖或者其他第三方库悄悄引入了旧版Hibernate。

Maven用户:

执行命令查看依赖树,找出所有Hibernate相关的依赖:

mvn dependency:tree | grep hibernate

如果发现有旧版本的Hibernate模块,在你的依赖中通过<exclusions>排除掉,比如:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${springVersion}</version>
    <exclusions>
        <exclusion>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Gradle用户:

执行命令查看依赖树:

gradle dependencies | grep hibernate

然后用exclude排除冲突的依赖:

compile('org.springframework:spring-orm') {
    exclude group: 'org.hibernate', module: 'hibernate-core'
}

4. 手动指定Integrator作为兜底方案

如果上面的方法都试过还是不行,可以尝试绕过ServiceLoader加载,手动在LocalSessionFactoryBean中指定JpaIntegrator:

@Configuration
public class HibernateConfig {
    @Bean
    public LocalSessionFactoryBean sessionFactory(DataSource dataSource) {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setPackagesToScan("com.yourpackage.entity");
        // 手动添加JpaIntegrator
        sessionFactory.setIntegrators(new org.hibernate.jpa.event.spi.JpaIntegrator());
        // 其他Hibernate配置...
        Properties hibernateProperties = new Properties();
        hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        sessionFactory.setHibernateProperties(hibernateProperties);
        return sessionFactory;
    }
}

注意:这个方法前提是JpaIntegrator类已经在类路径中,所以还是要先确保依赖正确。

最后验证步骤

  1. 清理项目的构建缓存(Maven的clean,Gradle的clean)
  2. 重新构建项目
  3. 启动应用,检查报错是否消失

内容的提问来源于stack exchange,提问作者Noname Noferstname

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:52:17