Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有jpa属性转换器的PostgreSQL jsonb类型_Java_Postgresql_Jpa_Jsonb - Fatal编程技术网

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

Java 带有jpa属性转换器的PostgreSQL jsonb类型,java,postgresql,jpa,jsonb,Java,Postgresql,Jpa,Jsonb,我有一个列类型为“jsonb”的表。 在实体I中,使用属性转换器设置此列的类型字符串: @Convert(converter = JSONBConverter.class) @Column(name = STATE_COLUMN, nullable = false) private String getState() { return state; } 我的转换器看起来像: @Converter public class JSONBConverter implements Attrib

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

@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;
    }
}
@转换器
公共类JSONBConverter实现AttributeConverter{
@凌驾
公共对象convertToDatabaseColumn(字符串属性){
PGobject结果=新的PGobject();
setType(“json”);
试一试{
result.setValue(属性);
}捕获(SQLE异常){
抛出新的IllegalArgumentException(“无法设置jsonb值”);
}
返回结果;
}
@凌驾
公共字符串convertToEntityAttribute(对象dbData){
if(PGobject的dbData实例){
返回((PGobject)dbData.getValue();
}
返回StringUtils.EMPTY;
}
}
我将方言设置为:
org.hibernate.dialogue.postgresql95dialogue

我以为它会成功的。但我发现了一个错误:

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

当我调试时,它在
PgPreparedStatement
类setObject方法1936628443中获得
targetSqlType
——对象类型上指示了什么,该对象类型取自在
SqlTypeDescriptorRegistry
类中分配的AttributeConverter类

我有:

postgresql版本
42.2.1


hibernate版本
5.2.10.Final
AttributeConverter
+
json/jsonb
不能很好地协同工作,因为需要在
PreparedStatement
级别绑定json对象

您必须声明一个Hibernate类型才能使JSONB工作

有关如何做到这一点的详细教程,请参见