Spring Boot创建entityManagerFactory Bean报错的原因与修复方法咨询
错误原因分析
Spring Boot 3.x 已全面迁移到Jakarta EE规范(替代原Java EE),但你的依赖配置存在多处兼容性冲突:
- Hibernate版本不兼容:你手动引入的Hibernate 5.4.30.Final基于旧的Java EE规范(
javax.persistence),而Spring Boot 3.1.0要求依赖适配Jakarta EE的jakarta.persistence接口,导致SpringHibernateJpaPersistenceProvider无法匹配旧接口,触发Bean创建失败。 - JPA API依赖冗余冲突:手动引入的
jakarta.persistence:jakarta.persistence-api:3.1.0与Hibernate 5.x不兼容,加剧了依赖冲突。 - Springfox版本过时:Springfox 2.9.2完全不支持Spring Boot 3.x,其依赖的旧Spring MVC组件会引发额外兼容性问题。
修复方法
1. 移除冗余的Hibernate和JPA API依赖
Spring Boot的spring-boot-starter-data-jpa已默认集成适配3.x版本的Hibernate和JPA API,无需手动指定。删除以下依赖:
implementation 'org.hibernate:hibernate-core:5.4.30.Final' implementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
2. 替换Springfox为兼容的API文档工具
Springfox 2.x不支持Spring Boot 3.x,改用Spring官方推荐的Springdoc OpenAPI:
添加新依赖:
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
删除原Springfox依赖:
implementation 'io.springfox:springfox-swagger2:2.9.2' implementation 'io.springfox:springfox-swagger-ui:2.9.2'
3. 优化PostgreSQL驱动版本(推荐)
让Spring Boot自动管理兼容的驱动版本,移除手动指定的版本号:
implementation 'org.postgresql:postgresql'
4. 清理重复依赖
删除重复的JUnit 4依赖:
testImplementation 'junit:junit:4.13.1' // 删除其中一条重复项
修复后的完整依赖配置
plugins { id 'java' id 'org.springframework.boot' version '3.1.0' id 'io.spring.dependency-management' version '1.1.0' } sourceCompatibility = '17' dependencies { implementation 'org.postgresql:postgresql' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' implementation 'ch.qos.logback:logback-classic:1.4.6' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'junit:junit:4.13.1' }
验证配置
application.properties中的现有配置无需修改,Spring Boot会自动适配新的依赖版本。
内容的提问来源于stack exchange,提问作者user20894127
相关产品推荐
相关产品推荐

