Java 带有jpa属性转换器的PostgreSQL jsonb类型
我有一个列类型为“jsonb”的表。 在实体I中,使用属性转换器设置此列的类型字符串: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
@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工作
有关如何做到这一点的详细教程,请参见