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

Spring Hibernate向PostgreSQL存数据时metadata字段json与bytea类型不匹配问题

报错原因

Hibernate默认将实体类中的metadata字段序列化为字节数组(bytea)写入数据库,与PostgreSQL表中定义的json字段类型不匹配,触发类型校验报错。

最简解决方案

方案1:Hibernate 6+ / Spring Boot 3+ 适用(无需额外依赖)

直接在Notification实体类的metadata字段上添加如下注解即可,Hibernate会自动完成Java对象与PostgreSQL JSON类型的互转,原有业务代码无需任何修改:

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

@JdbcTypeCode(SqlTypes.JSON)
private 你的metadata字段类型 metadata;

方案2:Hibernate 5.x 适用

  1. 引入对应版本的hibernate-types依赖,例如Hibernate 5.6版本对应依赖为hibernate-types-56
  2. 实体类添加类型定义,给metadata字段指定JSON类型:
import com.vladmihalcea.hibernate.type.json.JsonType;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;

@TypeDef(name = "json", typeClass = JsonType.class)
public class Notification {
    // 其他字段省略
    @Type(type = "json")
    private 你的metadata字段类型 metadata;
}

临时应急方案

如果需要快速验证业务逻辑,可临时将实体类的metadata字段改为String类型,读写时手动做JSON序列化/反序列化,或者将PostgreSQL表的metadata字段类型改为bytea,这两种方案无需修改依赖和新增注解,但长期维护成本更高,仅适合临时使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:15:06