PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да използвам Postgres 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);
    }
  }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Никой оператор не съответства на даденото име и тип(ове) на аргумента. Може да се наложи да добавите изрични прехвърляния на типа. -- Netbeans, Postgresql 8.4 и Glassfish

  2. Трябва да инсталирате postgresql-server-dev-X.Y за изграждане на разширение от страна на сървъра или libpq-dev за изграждане на приложение от страна на клиента

  3. функцията връща множество колони като една колона вместо множество колони

  4. Как да конфигурирате репликация от клъстер към клъстер за PostgreSQL

  5. Коя е най-добрата PostgreSQL рамка за висока достъпност? PAF срещу repmgr срещу инфографика на Patroni