升级Spring Boot 3.3.0后创建entityManagerFactory报错求助
Spring Boot 3.3.0升级后Hibernate使用Jakarta而非Javax的解决方案
你的问题核心是依赖冲突:Spring Boot 3.x全面基于Jakarta EE,但pom.xml中存在多个仍依赖Javax生态的库,导致Hibernate加载时拉取了Javax的类。以下是具体解决步骤:
1. 替换Hibernate Types版本
当前使用的hibernate-types-55适配的是Hibernate 5.x(Javax生态),而Spring Boot 3.x集成的是Hibernate 6.x(Jakarta生态),必须更换为对应版本:
<dependency> <groupId>com.vladmihalcea</groupId> <artifactId>hibernate-types-60</artifactId> <version>2.21.1</version> <!-- 选择适配Hibernate 6.x的最新稳定版 --> </dependency>
2. 升级Kie依赖到Jakarta兼容版本
Kie 7.x系列基于Javax,Kie 8.x才切换到Jakarta EE,需要把所有kie相关依赖升级到8.x版本(示例选用兼容Spring Boot 3.3.0的稳定版):
<dependency> <groupId>org.kie</groupId> <artifactId>kie-api</artifactId> <version>8.44.0.Final</version> </dependency> <dependency> <groupId>org.kie</groupId> <artifactId>kie-ci</artifactId> <version>8.44.0.Final</version> </dependency> <dependency> <groupId>org.kie</groupId> <artifactId>kie-internal</artifactId> <version>8.44.0.Final</version> </dependency>
3. 清理冗余/冲突依赖
- 移除手动添加的
jakarta.transaction-api:spring-boot-starter-data-jpa已包含适配的Jakarta事务API,手动添加会引发版本冲突。 - 替换JUnit 4为JUnit 5:Spring Boot 3.x的
spring-boot-starter-test默认使用JUnit Jupiter,移除原junit:junit依赖,改用JUnit 5 API:<!-- 移除原junit依赖,替换为以下内容 --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <scope>test</scope> </dependency> - 移除
org.springframework:spring-test:spring-boot-starter-test已包含该依赖,无需重复添加。
4. 验证依赖树
执行Maven命令排查是否仍有Javax依赖残留:
mvn dependency:tree | grep javax
若输出存在Javax相关依赖,找到对应的父依赖,要么升级父依赖版本,要么通过exclusions排除Javax依赖,示例:
<dependency> <!-- 存在Javax依赖的第三方库 --> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <exclusions> <exclusion> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> </exclusion> <!-- 添加其他需要排除的Javax相关依赖 --> </exclusions> </dependency>
内容的提问来源于stack exchange,提问作者MA1
相关产品推荐
相关产品推荐

