Maison  >  Article  >  Java  >  Comment mapper les colonnes JSON dans PostgreSQL aux propriétés d'entité Hibernate ?

Comment mapper les colonnes JSON dans PostgreSQL aux propriétés d'entité Hibernate ?

DDD
DDDoriginal
2024-10-26 06:38:30977parcourir

How to Map JSON Columns in PostgreSQL to Hibernate Entity Properties?

Mappage des colonnes JSON dans PostgreSQL vers les propriétés d'entité Hibernate

Problème : mappage des colonnes JSON vers les entités Hibernate

Mappage des données JSON stockées dans PostgreSQL vers l'entité Hibernate les propriétés peuvent être difficiles. Tenter de mapper la colonne à un champ de chaîne dans l'entité génère une exception lors de l'enregistrement de l'entité, indiquant une incapacité à convertir des caractères variables (chaîne) en JSON.

Solution : définir un type d'utilisateur personnalisé

Pour mapper efficacement les colonnes JSON aux entités Hibernate, un type d'utilisateur personnalisé doit être défini. Ce type traduit entre les valeurs String et le type de données JSON utilisé dans la base de données.

1. Extension du dialecte PostgreSQL :

Étendez le dialecte PostgreSQL par défaut pour reconnaître le type "json" :

<code class="java">public class JsonPostgreSQLDialect extends PostgreSQL9Dialect {

    public JsonPostgreSQLDialect() {
        super();
        this.registerColumnType(Types.JAVA_OBJECT, "json");
    }
}</code>

2. Implémentation du type d'utilisateur :

Implémentez l'interface org.hibernate.usertype.UserType pour définir le mappage personnalisé :

<code class="java">public class StringJsonUserType implements UserType {

    // ... implementation of required methods ...
}</code>

3. Annotation de l'entité et de la propriété :

Ajoutez les annotations suivantes à la déclaration de classe d'entité et à la propriété mappée JSON :

<code class="java">@TypeDefs({@TypeDef(name = "StringJsonObject", typeClass = StringJsonUserType.class)})
...
@Type(type = "StringJsonObject")
public String getJsonPayload() { ... }</code>

Exemple de projet :

Référez-vous au projet GitHub pour un exemple complet d'implémentation : https://github.com/timfulmer/hibernate-postgres-jsontype

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn