Zuordnen von in PostgreSQL gespeicherten JSON-Daten zu Hibernate-Entitäten Eigenschaften können eine Herausforderung sein. Der Versuch, die Spalte einem String-Feld in der Entität zuzuordnen, löst beim Speichern der Entität eine Ausnahme aus, die darauf hinweist, dass die Zeichenvariation (String) nicht in JSON konvertiert werden kann.
Um JSON-Spalten effektiv Hibernate-Entitäten zuzuordnen, muss ein benutzerdefinierter Benutzertyp definiert werden. Dieser Typ übersetzt zwischen String-Werten und dem in der Datenbank verwendeten JSON-Datentyp.
1. Erweitern des PostgreSQL-Dialekts:
Erweitern Sie den Standard-PostgreSQL-Dialekt, um den Typ „json“ zu erkennen:
<code class="java">public class JsonPostgreSQLDialect extends PostgreSQL9Dialect { public JsonPostgreSQLDialect() { super(); this.registerColumnType(Types.JAVA_OBJECT, "json"); } }</code>
2. Implementieren des Benutzertyps:
Implementieren Sie die Schnittstelle org.hibernate.usertype.UserType, um die benutzerdefinierte Zuordnung zu definieren:
<code class="java">public class StringJsonUserType implements UserType { // ... implementation of required methods ... }</code>
3. Kommentieren der Entität und Eigenschaft:
Fügen Sie die folgenden Anmerkungen zur Entitätsklassendeklaration und der JSON-zugeordneten Eigenschaft hinzu:
<code class="java">@TypeDefs({@TypeDef(name = "StringJsonObject", typeClass = StringJsonUserType.class)}) ... @Type(type = "StringJsonObject") public String getJsonPayload() { ... }</code>
Beispielprojekt:
Eine vollständige Beispielimplementierung finden Sie im GitHub-Projekt: https://github.com/timfulmer/hibernate-postgres-jsontype
Das obige ist der detaillierte Inhalt vonWie ordne ich JSON-Spalten in PostgreSQL Hibernate-Entitätseigenschaften zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!