You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)后,系统找不到该类是必然现象。

核心解决步骤

  1. 替换配置中的类引用
    如果你在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
      
  2. 检查代码中的硬编码引用
    若项目代码里直接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)排除。

内容的提问来源于stack exchange,提问作者JavaStratocaster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:38:21