Maison > Java > javaDidacticiel > Comment mapper des tableaux PostgreSQL aux tableaux Java avec Hibernate ?

Comment mapper des tableaux PostgreSQL aux tableaux Java avec Hibernate ?

Susan Sarandon
Libérer: 2024-10-25 07:07:28
original
213 Les gens l'ont consulté

How to Map PostgreSQL Arrays to Java Arrays with Hibernate?

Mappage de tableaux PostgreSQL vers des tableaux Java avec Hibernate

Problème

Tentative de mappage d'un tableau PostgreSQL numérique à un tableau Java numérique à l'aide d'Hibernate entraîne un exception lors des requêtes de base de données.

Solution

Pour résoudre ce problème, suivez ces étapes :

  1. Ajouter une dépendance Maven de types Hibernate :
<code class="xml"><dependency>
    <groupId>com.vladmihalcea</groupId>
    <artifactId>hibernate-types-52</artifactId>
    <version>${hibernate-types.version}</version>
</dependency></code>
Copier après la connexion
  1. Définissez les définitions de type Hibernate :

Dans votre classe Java, spécifiez les types Hibernate personnalisés que vous utiliserez pour mapper les arrays :

<code class="java">@Type(type = "string-array")
@Column(name = "sensor_names", columnDefinition = "text[]")
private String[] sensorNames;

@Type(type = "int-array")
@Column(name = "sensor_values", columnDefinition = "integer[]")
private int[] sensorValues;</code>
Copier après la connexion
  1. Créer des types d'hibernation personnalisés (facultatif) :

Les classes StringArrayType et IntArrayType ne sont pas intégrées ; vous devez les créer comme suit :

<code class="java">@TypeDef(
    name = "string-array",
    typeClass = StringArrayType.class
)
@TypeDef(
    name = "int-array",
    typeClass = IntArrayType.class
)</code>
Copier après la connexion
  1. Test :

Lors de la persistance d'entités avec des valeurs de tableau, Hibernate générera des instructions SQL qui mapper correctement les tableaux.

Exemple

En supposant la structure de table suivante :

<code class="sql">CREATE TABLE event (
    id int8 not null,
    version int4,
    sensor_names text[],
    sensor_values integer[],
    primary key (id)
);</code>
Copier après la connexion

Vous pouvez le mapper à la classe Java suivante :

<code class="java">@Entity(name = "Event")
@Table(name = "event")
public static class Event extends BaseEntity {

    @Type(type = "string-array")
    @Column(name = "sensor_names", columnDefinition = "text[]")
    private String[] sensorNames;

    @Type(type = "int-array")
    @Column(name = "sensor_values", columnDefinition = "integer[]")
    private int[] sensorValues;

    //Getters and setters omitted for brevity
}</code>
Copier après la connexion

Lors de l'insertion d'entités avec des valeurs de tableau, Hibernate générera des instructions SQL telles que :

<code class="sql">INSERT INTO event (
    version,
    sensor_names,
    sensor_values,
    id
)
VALUES (
    0,
    {NULL},
    {NULL},
    0
);

INSERT INTO event (
    version,
    sensor_names,
    sensor_values,
    id
)
VALUES (
    0,
    {"Temperature","Pressure"},
    {"12","756"},
    1
);</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal