Spring Boot+JPA+Hibernate CRUD操作中遭遇Java版本不兼容异常求助
Spring Boot+JPA+Hibernate CRUD操作中遭遇Java版本不兼容异常求助
嗨,我之前也踩过这个一模一样的坑!先给你理清楚这个异常的核心问题,再给你两个靠谱的解决方向:
首先看这个异常信息:
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/hibernate/SessionFactory has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
这里的版本号对应关系得先搞明白:
- 类文件版本55.0 → 是用Java 11编译的
- 类文件版本52.0 → 你的当前运行环境是Java 8
简单说就是:你项目里的Hibernate依赖(具体是org.hibernate.SessionFactory这个类)是用Java11编译出来的,但你现在用Java8的JRE来跑项目,Java8认不出更高版本编译的类,所以就炸了。
接下来给你两个解决方向,选哪个看你的需求:
方向一:升级Java运行环境到Java11及以上
如果你的项目允许升级Java版本,这是最直接的办法:
- 如果你用IDEA/Eclipse这类IDE:去「Project Structure」(IDEA)或者「Build Path」(Eclipse)里,把项目的SDK、运行时环境都改成Java11或更高版本
- 如果用Maven构建:在
pom.xml里修改maven-compiler-plugin的source和target版本:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> </configuration> </plugin>
- 如果用Gradle构建:在
build.gradle里调整版本配置:
sourceCompatibility = 11 targetCompatibility = 11
方向二:降级Hibernate(或Spring Boot)版本到适配Java8的范围
如果不想升级Java,那就得把依赖降到兼容Java8的版本:
- Hibernate本身:Hibernate 5.4.x及以下版本是支持Java8的,而Hibernate 6.x开始要求Java11+,所以可以手动把Hibernate依赖版本降到5.x系列
- 如果你用Spring Boot更省心:Spring Boot 2.x系列(比如2.7.x版本)默认搭配的Hibernate版本是完全兼容Java8的,要是你不小心用了Spring Boot 3.x(它要求Java17+,搭配的Hibernate也是6.x),直接把Spring Boot版本降级到2.x系列就能解决问题
小提醒:用Spring Boot的话尽量别手动改Hibernate版本,跟着Spring Boot的官方版本绑定来,避免出现其他莫名其妙的兼容问题~
备注:内容来源于stack exchange,提问作者parasuraman
相关产品推荐
相关产品推荐

