Java17+SpringBoot3.0.3迁移遇Hibernate类找不到错误求助
问题分析与解决
你遇到的java.lang.ClassNotFoundException: org.hibernate.query.BindableType是因为Hibernate版本不匹配导致的:
- Spring Boot 3.x默认依赖Hibernate 6.x,而你手动引入的
hibernate-core-jakarta:5.6.15.Final是Hibernate 5.x的Jakarta兼容版本,这个版本里根本不存在org.hibernate.query.BindableType类——该类是Hibernate 6.x新增的。 - 同时你使用的
hibernate-jpamodelgen:6.1.7.Final是Hibernate 6.x的注解处理器,和旧版本的Hibernate核心库产生了版本冲突。
修复步骤
移除手动添加的旧Hibernate核心依赖
删除pom.xml中这段依赖:<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core-jakarta</artifactId> <version>5.6.15.Final</version> </dependency>移除spring-boot-starter-data-jpa中的排除项
修改spring-boot-starter-data-jpa依赖,去掉对hibernate-core的排除,让Spring Boot自动引入适配的Hibernate版本:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>3.0.2</version> </dependency>统一Hibernate jpamodelgen版本(可选但建议)
Spring Boot 3.x的dependencyManagement已经包含了Hibernate的版本管理,你可以直接移除hibernate-jpamodelgen的版本属性,改用Spring Boot提供的版本:- 先删除properties中的
<hibernate-jpamodelgen>6.1.7.Final</hibernate-jpamodelgen> - 然后修改jpamodelgen依赖:
<dependency> <groupId>org.hibernate.orm</groupId> <artifactId>hibernate-jpamodelgen</artifactId> <scope>provided</scope> </dependency>
这样能保证注解处理器和核心库版本完全一致,避免潜在冲突。
- 先删除properties中的
完成以上修改后,重新构建项目,ClassNotFoundException问题应该就能解决。
内容的提问来源于stack exchange,提问作者user21438552
相关产品推荐
相关产品推荐

