gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:24:22 26 4
gpt4 key购买 nike

我有一个包含“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�� Types: 1�936�628�443

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

我有:

postgresql 版本 42.2.1

hibernate 版本 5.2.10.Final

最佳答案

AttributeConverter + json/jsonb 不能很好地协同工作,因为您需要在 PreparedStatement 级别绑定(bind) JSON 对象。

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

参见 this article有关如何执行此操作的详细教程。

关于java - 带有 jpa 属性转换器的 PostgreSQL jsonb 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48854475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com