Spring Boot从Maven迁移Gradle后MySQL5InnoDBDialect类找不到
问题解决:Gradle迁移后ClassNotFoundException: org.hibernate.dialect.MySQL5InnoDBDialect
问题原因
- 版本不兼容:当前Gradle配置使用Spring Boot 3.0.6,默认集成Hibernate 6.x,但
org.hibernate.dialect.MySQL5InnoDBDialect是Hibernate 5.x专属的方言类,Hibernate 6.x已移除该类。而原Maven项目大概率使用Spring Boot 2.x(集成Hibernate 5.x),迁移时版本不匹配导致异常。 - 依赖冲突:配置中存在多处冗余/冲突依赖:
- 同时引入Hibernate 6.x的
hibernate-core和Hibernate 5.x的hibernate-entitymanager,版本矛盾。 - 同时包含Java EE的
javax.persistence-api和Jakarta EE的jakarta.persistence-api,Spring Boot 3.x仅需Jakarta EE API。 spring-data-jpa、hibernate-core等依赖已被spring-boot-starter-data-jpa自动包含,手动引入引发版本冲突。
- 同时引入Hibernate 6.x的
修改后的build.gradle(无需改动源码)
将Spring Boot版本降级至2.7.x(兼容原Maven项目环境,支持Java 17),并清理冲突依赖:
plugins { id 'java' id 'org.springframework.boot' version '2.7.12' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.me' version = '0.0.1-SNAPSHOT' sourceCompatibility = '17' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { runtimeOnly 'mysql:mysql-connector-java:8.0.33' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' testImplementation 'org.springframework.boot:spring-boot-starter-test' developmentOnly 'org.springframework.boot:spring-boot-devtools' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' } tasks.named('test') { useJUnitPlatform() }
修改说明
- 降级Spring Boot到2.7.12稳定版,对应Hibernate 5.6.x,自动包含
MySQL5InnoDBDialect类,匹配原Maven项目的依赖环境。 - 移除所有冗余依赖:Spring Boot的starter依赖已自动集成所需的Hibernate、JPA、JDBC等组件,无需手动指定。
- 依赖版本由Spring Boot的
dependency-management插件统一管控,彻底避免版本冲突。
内容的提问来源于stack exchange,提问作者Introspective
相关产品推荐
相关产品推荐

