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.
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!