Maison  >  Article  >  Java  >  Comment mapper une colonne PostgreSQL JSON à une propriété d'entité Hibernate ?

Comment mapper une colonne PostgreSQL JSON à une propriété d'entité Hibernate ?

DDD
DDDoriginal
2024-10-26 12:14:29720parcourir

How to Map a PostgreSQL JSON Column to a Hibernate Entity Property?

Mappage d'une colonne JSON PostgreSQL à une propriété d'entité Hibernate

Introduction

Intégration des données d'une colonne JSON PostgreSQL dans une propriété Hibernate l’entité peut poser des défis. Le type JSON dans PostgreSQL nécessite une stratégie de mappage spécifique pour une interaction transparente avec une propriété d'entité. Cet article explore les approches disponibles pour établir ce mappage, en fournissant des extraits de code et un exemple concret d'implémentation d'un type d'utilisateur personnalisé.

Identification du type de données

Quand tenter de mapper une colonne PostgreSQL JSON à un champ d'entité JPA2, en utilisant String comme type de données, peut entraîner des problèmes de conversion. Le type de valeur correct dépend des exigences spécifiques et de la stratégie de mappage utilisée.

Type d'utilisateur personnalisé

Pour mapper une colonne JSON à une propriété d'entité, vous pouvez définir un Mettre en veille prolongée le type d'utilisateur. Cela permet un mappage direct des valeurs String avec le type JSON de la base de données. Voici un exemple d'implémentation :

<code class="java">import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;
import org.hibernate.usertype.UserType;

import java.io.Serializable;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

public class StringJsonUserType implements UserType {
    // Implementation details here...
}</code>

Définition du type d'utilisateur

Le type d'utilisateur personnalisé est annoté dans la classe d'entité :

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

Annotation de propriété

La propriété d'entité est annotée pour utiliser le type d'utilisateur personnalisé :

<code class="java">@Type(type = "StringJsonObject")
public String getBar() {
    return bar;
}</code>

Configuration de la base de données

Hibernate se chargera de créer la colonne avec le type JSON dans la base de données en fonction du mappage d'entités.

Exemple de projet

Un projet GitHub est disponible pour une exploration plus approfondie :

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