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

时间:2018-02-18 17:22:33

标签: java postgresql jpa jsonb

我的表格中有“jsonb”类型的列。 在实体中,我为该列设置了带有属性converter的类型String:

@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:Nieznanawarto 类型:   1936628443

在调试时,它在targetSqlType类setObject方法1936628443中获取PgPreparedStatement - 在对象类型上显示的是从我在SqlTypeDescriptorRegistry类中分配的AttributeConverter类中获取的内容。

我有:

postgresql版本42.2.1

hibernate版本5.2.10.Final

1 个答案:

答案 0 :(得分:0)

AttributeConverter + json/jsonb不能很好地配合。

您要声明一种类型以使JSONB正常工作。见https://vladmihalcea.com/how-to-map-json-objects-using-generic-hibernate-types/