Spring Boot升级至2.7.14时EntityManagerFactory Bean创建失败求助
问题解决方法与调试思路
核心原因
Spring Boot 2.7.x 对应的 Hibernate 版本为 5.6.x,而 org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy 这个类在 Hibernate 5.5+ 中已被移除/重命名,你的配置或代码中直接引用了这个废弃类,导致entityManagerFactory Bean 创建失败。
解决步骤
1. 替换命名策略实现
将配置中引用的 Hibernate 原生命名策略,替换为 Spring Boot 提供的兼容实现:
- 原配置(可能在
application.properties/application.yml中):
或spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategyspring: jpa: hibernate: naming: physical-strategy: org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy - 修改为:
或spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
这个类由 Spring Boot 维护,会自动适配不同版本的 Hibernate,且实现了相同的驼峰转下划线命名逻辑。spring: jpa: hibernate: naming: physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
2. 清理依赖缓存并重新构建
- Maven 项目执行:
mvn clean install -U - Gradle 项目执行:
这一步会清理本地仓库中可能存在的旧版本依赖,确保使用 Spring Boot 2.7.14 管理的最新依赖版本。gradle clean build --refresh-dependencies
3. 检查代码中的硬编码引用
如果你的 Java 代码中直接 import 了org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy并使用,同样需要替换为org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy。
调试思路
1. 排查依赖冲突
使用依赖分析工具查看 Hibernate 版本是否一致:
- Maven:执行
mvn dependency:tree,搜索hibernate-core,确认所有依赖引入的 Hibernate 版本都是 Spring Boot 2.7.14 对应的 5.6.x 版本,若有旧版本(如 5.4.x),找到引入该版本的依赖并排除它。 - Gradle:执行
gradle dependencies,同样检查hibernate-core的版本,排除冲突的依赖。
2. 验证配置生效
启动测试前,确保配置文件中的命名策略已正确修改,可以在测试类中添加日志输出,打印 JPA 相关配置,确认physical-strategy已设置为 Spring 提供的类。
3. 逐步回滚验证
如果问题仍未解决,可以尝试:
- 暂时注释掉命名策略的配置,使用 Spring Boot 默认的命名规则,看测试是否能正常运行。
- 检查是否有自定义的 Hibernate 配置类,是否在代码中硬编码了该废弃类的引用。
内容的提问来源于stack exchange,提问作者Rohit Reddy
相关产品推荐
相关产品推荐

