Artur Sonnenhohl Artur Sonnenhohl - 3 months ago 92
JSON Question

How to use Postgres JSONB datatype with JPA?

Im not finding a way to map the JSON and JSONB datatypes from PostgreSQL using JPA (EclipseLink). Is some one using this datatypes with JPA and can give me some working examples?


All the answers helped me to reach the final solution that is ready for JPA and not EclipseLink or Hibernate specifically.

import org.postgresql.util.PGobject;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.json.Json;
import javax.json.JsonObject;
import javax.persistence.Converter;


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

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

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

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);