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

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

问题原因

  1. Hibernate版本兼容冲突:Hibernate 6.x中已移除PostgreSQL82Dialect类,但当前使用的hibernate-types-52是针对Hibernate 5.x的扩展库,内部仍依赖该已被移除的类。
  2. 依赖版本不匹配: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:35:31