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

如何修改Spring Data底层查询实现String与PostgreSQL jsonb自动类型映射

PostgreSQL jsonb与Java String类型映射解决方案

依赖配置

Hibernate 5.x 版本

需额外引入Hibernate Types工具包,Maven配置如下:

<!-- 需根据你使用的Hibernate版本选择对应依赖,以下为Hibernate 5.4.x 示例 -->
<dependency>
    <groupId>com.vladmihalcea</groupId>
    <artifactId>hibernate-types-54</artifactId>
    <version>2.21.1</version>
</dependency>

Hibernate 6.x 版本

内置JSON类型处理器,无需额外引入依赖。

实体类正确配置

Hibernate 5.x 版本

修正@TypeDef的类型指向JsonBinaryType即可:

import com.vladmihalcea.hibernate.type.json.JsonBinaryType;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;

import javax.persistence.*;

@Entity
@Table(name = "a", catalog = "")
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class A {
    @Type(type = "jsonb")
    @Column(name = "json-data", columnDefinition = "jsonb")
    private String myJsonData;
    
    // 省略构造方法、getter、setter
}

Hibernate 6.x 版本

直接使用@JdbcTypeCode注解即可完成自动映射:

import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;

import jakarta.persistence.*;

@Entity
@Table(name = "a", catalog = "")
public class A {
    @JdbcTypeCode(SqlTypes.JSON)
    @Column(name = "json-data", columnDefinition = "jsonb")
    private String myJsonData;
    
    // 省略构造方法、getter、setter
}

原配置错误原因

你之前的配置中将@TypeDef的typeClass指定为String.class,Hibernate会使用默认的基础类型处理器处理该字段,参数传入数据库时会被识别为普通字符串/字节类型,和PostgreSQL的jsonb类型不匹配。使用专门的JSON类型处理器后,Hibernate会自动完成Java类型到数据库jsonb类型的适配,无需手动在SQL中添加::jsonb强转。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:18:02