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

How to Map PostgreSQL Arrays to Java Arrays with Hibernate?

Susan Sarandon
Release: 2024-10-25 07:07:28
Original
212 people have browsed it

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>
Copy after login
  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>
Copy after login
  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>
Copy after login
  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>
Copy after login

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>
Copy after login

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>
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template