Spring Boot 2.7升级3遇ClassNotFoundException:缺失Hibernate指定类
Spring Boot 3升级后Hibernate
MultipleLinesSqlCommandExtractor找不到的解决办法 问题根源
Hibernate 6.x版本彻底移除了org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor类——这个类在Hibernate 5.x时期就已被标记为废弃,到6.x直接从代码库中删除,所以升级到Spring Boot 3(默认依赖Hibernate 6.x)后,系统找不到该类是必然现象。
核心解决步骤
替换配置中的类引用
如果你在application.properties或application.yml中配置了SQL导入文件的提取器,需要将旧类路径替换为Hibernate 6.x提供的新类:- Properties配置:
spring.jpa.properties.hibernate.hbm2ddl.import_files_sql_extractor=org.hibernate.tool.schema.internal.script.MultipleLinesSqlScriptExtractor - YAML配置:
spring: jpa: properties: hibernate: hbm2ddl: import_files_sql_extractor: org.hibernate.tool.schema.internal.script.MultipleLinesSqlScriptExtractor
- Properties配置:
检查代码中的硬编码引用
若项目代码里直接import或实例化了MultipleLinesSqlCommandExtractor,同样需要替换为org.hibernate.tool.schema.internal.script.MultipleLinesSqlScriptExtractor。
需要注意的关联问题
- 包结构重构影响:Hibernate 6.x对DDL脚本处理相关的类做了大规模包迁移,除了这个类,
SingleLineSqlCommandExtractor也被迁移为SingleLineSqlScriptExtractor,如果有相关配置或代码引用,都需要同步更新。 - 版本兼容性:Spring Boot 3.x与Hibernate 6.x强绑定,不要手动指定不兼容的Hibernate版本,优先使用Spring Boot的依赖管理来控制版本,避免出现依赖冲突。
- 依赖冲突排查:如果替换类引用后仍报错,用依赖分析工具排查是否有第三方依赖偷偷引入了Hibernate 5.x版本:
- Maven项目执行:
mvn dependency:tree - Gradle项目执行:
./gradlew dependencies
找到冲突的旧版本Hibernate依赖,通过<exclusions>(Maven)或exclude(Gradle)排除。
- Maven项目执行:
内容的提问来源于stack exchange,提问作者JavaStratocaster
相关产品推荐
相关产品推荐

