Heim  >  Artikel  >  Java  >  Wie ordne ich PostgreSQL-Arrays mit Hibernate Java-Arrays zu?

Wie ordne ich PostgreSQL-Arrays mit Hibernate Java-Arrays zu?

Susan Sarandon
Susan SarandonOriginal
2024-10-25 07:07:28111Durchsuche

How to Map PostgreSQL Arrays to Java Arrays with Hibernate?

Zuordnung von PostgreSQL-Arrays zu Java-Arrays mit Hibernate

Problem

Der Versuch, ein numerisches PostgreSQL-Array mit Hibernate einem numerischen Java-Array zuzuordnen, führt zu einem Ausnahme bei Datenbankabfragen.

Lösung

Um dieses Problem zu beheben, führen Sie die folgenden Schritte aus:

  1. Maven-Abhängigkeit für Ruhezustandstypen hinzufügen:
<code class="xml"><dependency>
    <groupId>com.vladmihalcea</groupId>
    <artifactId>hibernate-types-52</artifactId>
    <version>${hibernate-types.version}</version>
</dependency></code>
  1. Definieren Sie Hibernate-Typdefinitionen:

Geben Sie in Ihrer Java-Klasse die benutzerdefinierten Hibernate-Typen an, die Sie zum Zuordnen verwenden 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>
  1. Benutzerdefinierte Ruhezustandstypen erstellen (optional):

Die Klassen StringArrayType und IntArrayType sind nicht integriert; Sie müssen sie wie folgt erstellen:

<code class="java">@TypeDef(
    name = "string-array",
    typeClass = StringArrayType.class
)
@TypeDef(
    name = "int-array",
    typeClass = IntArrayType.class
)</code>
  1. Testen:

Beim Beibehalten von Entitäten mit Array-Werten generiert Hibernate SQL-Anweisungen, die Ordnen Sie die Arrays korrekt zu.

Beispiel

Angenommen, die folgende Tabellenstruktur:

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

Sie können es der folgenden Java-Klasse zuordnen:

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

Beim Einfügen von Entitäten mit Array-Werten generiert Hibernate SQL-Anweisungen wie:

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

Das obige ist der detaillierte Inhalt vonWie ordne ich PostgreSQL-Arrays mit Hibernate Java-Arrays zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn