PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak wykorzystać typ danych Postgres JSONB z JPA?

Wszystkie odpowiedzi pomogły mi osiągnąć ostateczne rozwiązanie, które jest gotowe do obsługi JPA, a nie konkretnie EclipseLink lub 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);
    }
  }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekierowanie wstawiania oparte na wyzwalaczu Postgres bez przerywania RETURNING

  2. Migracja baz danych PostgreSQL ze środowiska lokalnego do chmury przy użyciu AWS RDS

  3. Tabela krzyżowa z dużą lub nieokreśloną liczbą kategorii

  4. Domyślna lokalizacja bazy danych PostgreSQL w systemie Linux

  5. Wdrażanie i zarządzanie PostgreSQL 11:Nowość w ClusterControl 1.7.1