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

我没有找到使用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);

}

}

}

以上是 如何在JPA中使用Postgres JSONB数据类型? 的全部内容, 来源链接: utcz.com/qa/426745.html

回到顶部