Spring Boot 2.5.12升级至3.0.6遇entityManagerFactory创建失败问题
Spring Boot 2.5.12升级至3.0.6时Hibernate方言类缺失问题
问题现象
启动应用时抛出Bean创建异常,核心错误为java.lang.NoClassDefFoundError: org/hibernate/dialect/PostgreSQL82Dialect,完整报错栈如下:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: org/hibernate/dialect/PostgreSQL82Dialect Caused by: java.lang.NoClassDefFoundError: org/hibernate/dialect/PostgreSQL82Dialect at com.vladmihalcea.hibernate.type.HibernateTypesContributor.contribute(HibernateTypesContributor.java:34) at org.hibernate.boot.internal.MetadataBuilderImpl.applyTypes(MetadataBuilderImpl.java:296)
当前配置与环境
pom.xml相关依赖
<!-- versions --> <hibernate-core.version>6.2.5.Final</hibernate-core.version> <hibernate-types.version>2.16.3</hibernate-types.version> <postgresql.version>42.5.4</postgresql.version> <spring.boot.version>3.0.6</spring.boot.version> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>com.vladmihalcea</groupId> <artifactId>hibernate-types-52</artifactId> <version>${hibernate-types.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate-core.version}</version> <scope>compile</scope> </dependency>
应用配置(application.yaml)
jpa: properties: hibernate: dialect: org.hibernate.dialect.PostgreSQLDialect
环境信息
Java版本:17
问题原因
- Hibernate版本兼容冲突:Hibernate 6.x中已移除
PostgreSQL82Dialect类,但当前使用的hibernate-types-52是针对Hibernate 5.x的扩展库,内部仍依赖该已被移除的类。 - 依赖版本不匹配:Spring Boot 3.x默认适配Hibernate 6.x,而
hibernate-types-52属于Hibernate 5系列的扩展组件,两者无法兼容。
解决方案
1. 替换适配Hibernate 6.x的hibernate-types依赖
将hibernate-types-52替换为针对Hibernate 6.x的hibernate-types-60,并升级到兼容版本(例如2.20.0,可根据Hibernate 6.x版本选择对应兼容版本):
<dependency> <groupId>com.vladmihalcea</groupId> <artifactId>hibernate-types-60</artifactId> <version>2.20.0</version> <scope>compile</scope> </dependency>
2. 移除手动指定的hibernate-core依赖(可选)
Spring Boot的spring-boot-starter-data-jpa已经内置了适配版本的hibernate-core,手动指定版本易引发冲突,建议移除单独的hibernate-core依赖,依赖Spring Boot自动管理版本一致性:
<!-- 移除该依赖 --> <!-- <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate-core.version}</version> <scope>compile</scope> </dependency> -->
3. 验证方言配置
当前配置的org.hibernate.dialect.PostgreSQLDialect在Hibernate 6.x中是有效实现,无需修改,只需确保项目其他代码未引用旧版方言类即可。
内容的提问来源于stack exchange,提问作者Heri.R
相关产品推荐
相关产品推荐

