„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie ordne ich PostgreSQL-JSON-Spalten mithilfe eines benutzerdefinierten Benutzertyps Hibernate-Entitäten zu?

Wie ordne ich PostgreSQL-JSON-Spalten mithilfe eines benutzerdefinierten Benutzertyps Hibernate-Entitäten zu?

Veröffentlicht am 08.11.2024
Durchsuche:793

How to Map PostgreSQL JSON Columns to Hibernate Entities Using a Custom User Type?

Zuordnung von PostgreSQL-JSON-Spalten zu Hibernate-Entitäten

Bei der Arbeit mit PostgreSQL-Datenbanken stößt man häufig auf Spalten, die Daten im JSON-Format speichern. Um diese Spalten mithilfe von Hibernate effektiv Java-Entitäten zuzuordnen, ist es wichtig, den geeigneten Datentyp auszuwählen.

In diesem Zusammenhang dreht sich die vorliegende Frage um die Zuordnung einer PostgreSQL-JSON-Spalte zu einem Hibernate-Entitätsfeld. Ein gängiger Ansatz ist die Verwendung eines String-Felds, wie im bereitgestellten Code-Snippet zu sehen ist:

@Entity
public class MyEntity {

    private String jsonPayload;

    public MyEntity() {
    }
}

Dieser Ansatz kann jedoch zu Ausnahmen beim Speichern der Entität führen, da Hibernate versucht, einen String in JSON zu konvertieren.

Korrekter Werttyp für JSON-Spalten

Um eine PostgreSQL-JSON-Spalte korrekt einem Hibernate-Entitätsfeld zuzuordnen, sollten Sie die Verwendung eines benutzerdefinierten Benutzertyps in Betracht ziehen. Durch die Erstellung einer userType-Implementierung wie StringJsonUserType können Sie die Zuordnung zwischen String-Werten und dem JSON-Datenbanktyp verwalten.

Hier ist eine Beispielimplementierung:

public class StringJsonUserType implements UserType {
    ...
    @Override
    public int[] sqlTypes() {
        return new int[] { Types.JAVA_OBJECT};
    }

    ...
}

Sie können dann die Entitätseigenschaft mit dem benutzerdefinierten Benutzertyp kommentieren:

@Type(type = "StringJsonObject")
public String getJsonPayload() {
    return jsonPayload;
}

Zusätzliche Konfiguration

Um diese Lösung vollständig zu implementieren, müssen Sie möglicherweise Folgendes tun:

  1. Erweitern Sie den PostgreSQL-Dialekt um den JSON-Typ :
public class JsonPostgreSQLDialect extends PostgreSQL9Dialect {
    ...
    this.registerColumnType(Types.JAVA_OBJECT, "json");
    ...
}
  1. Annotieren Sie die Entitätsklasse mit @TypeDefs:
@TypeDefs({ @TypeDef( name= "StringJsonObject", typeClass = StringJsonUserType.class)})
  1. Fügen Sie die erforderlichen Bibliotheken in die Benutzertypimplementierung für Fortgeschrittene ein Mapping.

GitHub-Referenzprojekt

Zur weiteren Erkundung ziehen Sie das bereitgestellte GitHub-Projekt in Betracht: https://github.com/timfulmer/hibernate-postgres- jsontype

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3