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:
public class JsonPostgreSQLDialect extends PostgreSQL9Dialect {
...
this.registerColumnType(Types.JAVA_OBJECT, "json");
...
}
@TypeDefs({ @TypeDef( name= "StringJsonObject", typeClass = StringJsonUserType.class)})
GitHub-Referenzprojekt
Zur weiteren Erkundung ziehen Sie das bereitgestellte GitHub-Projekt in Betracht: https://github.com/timfulmer/hibernate-postgres- jsontype
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