升级至Spring Boot 3.0.2后SpringHibernateJpaPersistenceProvider未实现接口错误
Spring Boot 3.0.2升级后启动失败:EntityManagerFactory创建失败解决方案
错误核心
org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider 类未实现 jakarta.persistence.spi.PersistenceProvider 接口,导致entityManagerFactory Bean创建失败。
原因分析
Spring Boot 3.x 基于Jakarta EE 9+规范,所有Java EE相关API包名从javax.persistence迁移至jakarta.persistence。出现该错误的核心原因是项目中存在依赖版本不兼容或混合依赖:
- 残留了基于
javax.persistence的旧版JPA/Hibernate依赖 - Spring Data JPA版本与Spring Boot 3.0.2不匹配
解决方案
- 统一依赖版本管理:直接使用Spring Boot Parent或DependencyManagement控制依赖版本,避免手动指定版本导致的不兼容。示例Maven配置:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.2</version> <relativePath/> </parent> <dependencies> <!-- 引入Spring Data JPA Starter,无需指定版本 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> </dependencies>
- 清理旧版javax依赖:通过依赖树排查并排除所有基于
javax.persistence的依赖。执行Maven命令查看依赖树:
mvn dependency:tree
找到包含javax.persistence-api的依赖,在pom.xml中排除:
<dependency> <groupId>第三方依赖组ID</groupId> <artifactId>第三方依赖包ID</artifactId> <exclusions> <exclusion> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> </exclusion> </exclusions> </dependency>
确保Hibernate版本适配:Spring Boot 3.0.2默认集成Hibernate 6.1.x(完全适配Jakarta EE),若手动指定Hibernate版本,必须使用6.0+版本,禁止使用基于
javax的5.x版本。检查自定义JPA配置:若项目中有自定义
LocalContainerEntityManagerFactoryBean或PersistenceProvider相关代码,确保所有引用的API都来自jakarta.persistence包,替换旧的javax.persistence相关导入。
内容的提问来源于stack exchange,提问作者Saurabh Rai
相关产品推荐
相关产品推荐

