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 适用
- 引入对应版本的
hibernate-types依赖,例如Hibernate 5.6版本对应依赖为hibernate-types-56 - 实体类添加类型定义,给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
相关产品推荐
相关产品推荐

