Speichern von json, jsonb, hstore, xml -, enum -, IP-addr, etc schlägt mit "Spalte "x" ist vom Typ json, aber Ausdruck vom Typ character varying"

Beim Einsatz von PostgreSQL zum speichern von Daten in einem Feld ein string-wie validiert Art, wie xml, json, jsonb, xml, ltree, etc, die INSERT oder UPDATE schlägt mit einer Fehlermeldung wie:

column "the_col" is of type json but expression is of type character varying

... oder

column "the_col" is of type json but expression is of type text

Warum? Was kann ich dagegen tun?

Ich bin mit JDBC (PgJDBC).

Dies geschieht durch Hibernate, JPA, und alle möglichen anderen Abstraktionsebenen.

Dem "standard" - Beratung durch das PostgreSQL-team, ist die Verwendung einer CAST im SQL. Dies ist nicht sinnvoll für Menschen, die mit query-Generatoren oder ORMs, vor allem, wenn die Systeme nicht über explizite Unterstützung für Datenbank-Typen wie json, so sind Sie abgebildet über String in der Anwendung.

Einige ORMs ermöglichen die Implementierung benutzerdefinierter Typ-Handler, aber ich möchte nicht wirklich zum schreiben eines benutzerdefinierten Prozedur für jeden Datentyp, für jede ORM, z.B. json auf Hibernate, json auf EclipseLink, json auf OpenJPA, xml Hibernate, ... etc. Es gibt keine JPA2 SPI für das schreiben einer generischen benutzerdefinierten Typ-handler. Ich bin auf der Suche nach einer Allgemeinen Lösung.

InformationsquelleAutor Craig Ringer | 2015-08-27
Schreibe einen Kommentar