Home  >  Article  >  Java  >  How to Map PostgreSQL Arrays to Java Arrays with Hibernate?

How to Map PostgreSQL Arrays to Java Arrays with Hibernate?

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

How to Map PostgreSQL Arrays to Java Arrays with Hibernate?

Mapping PostgreSQL Arrays to Java Arrays with Hibernate

Problem

Attempting to map a numeric PostgreSQL array to a numeric Java array using Hibernate results in an exception during database queries.

Solution

To resolve this issue, follow these steps:

  1. Add Hibernate Types Maven Dependency:
<code class="xml"><dependency>
    <groupId>com.vladmihalcea</groupId>
    <artifactId>hibernate-types-52</artifactId>
    <version>${hibernate-types.version}</version>
</dependency></code>
  1. Define Hibernate Type Definitions:

In your Java class, specify the custom Hibernate types you'll use to map the 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. Create Custom Hibernate Types (Optional):

The StringArrayType and IntArrayType classes are not built-in; you need to create them as follows:

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

When persisting entities with array values, Hibernate will generate SQL statements that map the arrays correctly.

Example

Assuming the following table structure:

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

You can map it to the following Java class:

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

When inserting entities with array values, Hibernate will generate SQL statements like:

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

The above is the detailed content of How to Map PostgreSQL Arrays to Java Arrays with Hibernate?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn