繁体   English   中英

带有 jpa 属性转换器的 PostgreSQL jsonb 类型

[英]PostgreSQL jsonb type with jpa attribute converter

我有一个带有“jsonb”类型列的表格。 在实体中,我使用属性转换器为此列设置了字符串类型:

@Convert(converter = JSONBConverter.class)
@Column(name = STATE_COLUMN, nullable = false)
private String getState() {
    return state;
}

我的转换器看起来像:

@Converter
public class JSONBConverter implements AttributeConverter<String, Object> {
    @Override
    public Object convertToDatabaseColumn(String attribute) {
        PGobject result = new PGobject();
        result.setType("json");
        try {
            result.setValue(attribute);
        } catch (SQLException e) {
            throw new IllegalArgumentException("Unable to set jsonb value");
        }
        return result;
    }

    @Override
    public String convertToEntityAttribute(Object dbData) {
        if (dbData instanceof PGobject) {
            return ((PGobject) dbData).getValue();
        }
        return StringUtils.EMPTY;
    }
}

我将方言设置为: org.hibernate.dialect.PostgreSQL95Dialect

我以为它会起作用。 但我收到一个错误:

org.postgresql.util.PSQLException: Nieznana warto 类型:1 936 628 443

当我调试它时,它在PgPreparedStatement类 setObject 方法 1936628443 中获取targetSqlType - 指示从我的 AttributeConverter 类中获取的对象类型,该类在SqlTypeDescriptorRegistry类中分配。

我有:

PostgreSQL 版本42.2.1

休眠版本5.2.10.Final

AttributeConverter + json/jsonb不能很好地配合使用,因为您需要在PreparedStatement级别绑定 JSON 对象。

您必须声明一个休眠类型才能使 JSONB 正常工作。

有关如何执行此操作的详细教程,请参阅本文

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM