gpt4 book ai didi

java - 如何在 JPA 中使用 Postgres JSONB 数据类型?

转载 作者:太空狗 更新时间:2023-10-29 22:38:41 26 4
gpt4 key购买 nike

我找不到使用 JPA (EclipseLink) 从 PostgreSQL 映射 JSON 和 JSONB 数据类型的方法。有人在 JPA 中使用这种数据类型并且可以给我一些工作示例吗?

最佳答案

所有的答案都帮助我找到了为 JPA 而不是专门为 EclipseLink 或 Hibernate 准备的最终解决方案。

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import javax.json.Json;
import javax.json.JsonObject;
import javax.persistence.Converter;
import org.postgresql.util.PGobject;

@Converter(autoApply = true)
public class JsonConverter implements javax.persistence.AttributeConverter<JsonObject, Object> {

private static final long serialVersionUID = 1L;
private static ObjectMapper mapper = new ObjectMapper();

@Override
public Object convertToDatabaseColumn(JsonObject objectValue) {
try {
PGobject out = new PGobject();
out.setType("json");
out.setValue(objectValue.toString());
return out;
} catch (Exception e) {
throw new IllegalArgumentException("Unable to serialize to json field ", e);
}
}

@Override
public JsonObject convertToEntityAttribute(Object dataValue) {
try {
if (dataValue instanceof PGobject && ((PGobject) dataValue).getType().equals("json")) {
return mapper.reader(new TypeReference<JsonObject>() {
}).readValue(((PGobject) dataValue).getValue());
}
return Json.createObjectBuilder().build();
} catch (IOException e) {
throw new IllegalArgumentException("Unable to deserialize to json field ", e);
}
}
}

关于java - 如何在 JPA 中使用 Postgres JSONB 数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39830842/

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