我的表格中有“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
答案 0 :(得分:0)
AttributeConverter
+ json/jsonb
不能很好地配合。
您要声明一种类型以使JSONB正常工作。见https://vladmihalcea.com/how-to-map-json-objects-using-generic-hibernate-types/