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

升级SpringBoot 3.0后Postgres JSONB无法正常使用的问题

解决Spring Boot 3 + Hibernate 6下Postgres JsonB持久化问题

首先明确:Spring Boot 3完全支持Postgres JsonB,你的问题源于Hibernate 6对类型注解的变更,以及依赖版本不匹配。

核心问题分析

  1. Hibernate 6弃用了org.hibernate.annotations.TypeDef和旧的@Type注解,改用新的类型映射方式。
  2. 你之前尝试混用Hibernate 5.6和Spring Boot 3,由于Spring Boot 3基于Jakarta EE(jakarta.persistence包),而Hibernate 5.6仍使用Java EE(javax.persistence包),导致接口不兼容报错,这是不可行的。

解决方案一:使用Hibernate 6原生JSON支持(推荐)

Hibernate 6原生支持JSON类型,无需依赖第三方库,直接修改实体类即可:

修改实体类

import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.Id
import jakarta.persistence.Table
import org.hibernate.annotations.JdbcTypeCode
import org.hibernate.type.SqlTypes
import java.io.Serializable
import java.security.SecureRandom
import kotlin.math.abs

@Entity
@Table(name = "myTable")
data class RecommendationEntity(
    @Id
    open var id: Long = abs(SecureRandom().nextInt().toLong()),
    // 用@JdbcTypeCode指定JSON类型,配合columnDefinition指定postgres的jsonb
    @JdbcTypeCode(SqlTypes.JSON)
    @Column(columnDefinition = "jsonb")
    var data: MyModel
)

data class MyModel(
    // 你的POJO字段
) : Serializable

依赖调整

移除旧的第三方类型库依赖:

// 移除这一行
// implementation("com.vladmihalcea:hibernate-types-52:2.21.1")

解决方案二:继续使用vladmihalcea的Hibernate Types库

如果你习惯使用该库,需要升级到适配Hibernate 6的版本:

修改依赖

将hibernate-types-52替换为适配Hibernate 6的hibernate-types-60:

// 替换旧依赖
implementation("com.vladmihalcea:hibernate-types-60:2.21.1") // 可使用最新兼容版本

实体类调整

Hibernate 6中该库的注解用法略有变化,可参考如下写法:

import com.vladmihalcea.hibernate.type.json.JsonBinaryType
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.Id
import jakarta.persistence.Table
import org.hibernate.annotations.JdbcType

@Entity
@Table(name = "myTable")
data class RecommendationEntity(
    @Id
    open var id: Long = abs(SecureRandom().nextInt().toLong()),
    @JdbcType(JsonBinaryType::class)
    @Column(columnDefinition = "jsonb")
    var data: MyModel
)

data class MyModel(
    // 你的POJO字段
) : Serializable

额外注意事项

  • 确保Postgres驱动版本兼容Spring Boot 3,你当前使用的org.postgresql:postgresql:42.5.1是兼容的,无需修改。
  • Spring Boot 3默认会管理Hibernate版本,建议移除手动指定的org.hibernate.orm:hibernate-core依赖,直接使用Spring Boot提供的版本,避免版本冲突:
// 移除这一行
// implementation("org.hibernate.orm:hibernate-core:6.1.7.Final")

内容的提问来源于stack exchange,提问作者Johnny Alpha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:35:22