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