gpt4 book ai didi

json - 使用 Spring/JPA 写入 Postgres 数据库的 JSON 列

转载 作者:IT老高 更新时间:2023-10-28 13:54:00 43 4
gpt4 key购买 nike

我有一个名为“test”的表,其中包含 Postgres 9.3 中类型为 json 的列“sample_column”。我正在尝试使用 Spring/JPA 将以下内容写入列中:{"name":"Updated name"}

我在其他帖子上读到我需要添加一个自定义转换器来将字符串映射到 json 类型。这是我现在的代码:

TestDAO.java:

@Entity
@Table(name="test")
public class TestDAO implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id", unique=true, nullable=false)
private Long id;

@Column(name="sample_column")
@Convert(converter = MyCustomConverter.class)
private MyCustomClass sampleColumn;

// Getter / Setters
}

用于映射json内容的CustomClass:

public class MyCustomClass {
@JsonProperty("name")
public String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

最后是 ConverterClass:

@javax.persistence.Converter
public class MyCustomConverter implements AttributeConverter<MyCustomClass, String> {

private final static ObjectMapper objectMapper = new ObjectMapper();

@Override
@NotNull
public String convertToDatabaseColumn(@NotNull MyCustomClass myCustomObject) {
try {
return objectMapper.writeValueAsString(myCustomObject);
} catch (Exception ex) {
return null;
}
}

@Override
@NotNull
public MyCustomClass convertToEntityAttribute(@NotNull String databaseDataAsJSONString) {
try {
return objectMapper.readValue(databaseDataAsJSONString, MyCustomClass.class);
} catch (Exception ex) {
return null;
}
}
}

现在,我正在尝试将 json 列设置如下:

testDAO.getSampleColumn().setName("Updated name");
testRepository.saveAndFlush(testDAO);

但是当我尝试保存它时,我收到以下错误:

Caused by: org.postgresql.util.PSQLException: ERROR: column "sample_column" is of type json but expression is of type character varying
Hint: You will need to rewrite or cast the expression.

但是,我可以使用 testDAO.getSampleColumn().getName(); 读取 JSON 列这里有什么问题?我不想将任何类型转换添加到表中以自动将 Varying 转换为 Json。

谢谢。

最佳答案

您需要在 JDBC 级别使用 setObject,或者传递 PgJDBC 参数 stringtype=unspecified 以允许从字符串类型到 json 的隐式转换

PostgreSQL 对类型转换过于严格是个问题。

关于json - 使用 Spring/JPA 写入 Postgres 数据库的 JSON 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32238508/

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