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

PostgreSQL jsonb结合JPA属性转换器报错求助

解决PostgreSQL JSONB列JPA属性转换器导致的Types: 1936628443错误

这个错误我之前也碰到过,核心原因是你的属性转换器没有明确告诉Hibernate要转换到PostgreSQL的JSONB类型,导致Hibernate默认用了一个自定义的Object类型码(1936628443),而PostgreSQL驱动完全不认识这个类型,所以抛出了Nieznana wartość Types(未知类型值)的异常。

下面是具体的解决步骤:


1. 修改属性转换器,明确指定SQL类型

你的转换器应该实现AttributeConverter<String, Object>,但关键是要指定对应的SQL类型为JSONB。如果是Hibernate 6+,可以重写getSqlType方法;如果是旧版本,就在实体字段上明确列定义。

Hibernate 6+ 版本示例:

import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;
import org.hibernate.type.SqlTypes;

@Converter(autoApply = true)
public class JsonbToStringConverter implements AttributeConverter<String, Object> {

    @Override
    public Object convertToDatabaseColumn(String attribute) {
        // 直接返回字符串,Hibernate会自动适配为JSONB格式
        return attribute;
    }

    @Override
    public String convertToEntityAttribute(Object dbData) {
        return dbData != null ? dbData.toString() : null;
    }

    // 重点:指定SQL类型为JSON(Hibernate会根据方言映射到PostgreSQL的JSONB)
    @Override
    public int getSqlType() {
        return SqlTypes.JSON;
    }
}

旧版Hibernate(无getSqlType方法):

在实体的字段上直接指定列定义:

import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class YourEntity {
    @Id
    private Long id;

    @Column(name = "jsonb_column", columnDefinition = "jsonb")
    @Convert(converter = JsonbToStringConverter.class)
    private String jsonbContent;

    // getter和setter省略
}

2. 确认方言配置(可选但推荐)

你用的PostgreSQL95Dialect已经支持JSONB,但如果你的Hibernate版本比较新,建议升级到PostgreSQL10Dialect或更高版本,对JSONB的处理会更稳定,避免一些兼容性问题。


为什么会出现这个错误?

当属性转换器没有明确指定SQL类型时,Hibernate会把目标类型默认识别为Object,对应的内部类型码就是1936628443。PostgreSQL驱动接收到这个类型码后,无法匹配到它支持的任何SQL类型(比如JSONB对应的类型码是Types.JSON或PostgreSQL自定义的类型码),所以就抛出了这个未知类型的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:48:25