PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách ánh xạ một mảng PostgreSQL với Hibernate

Sự phụ thuộc của Maven

Điều đầu tiên bạn cần làm là thiết lập phụ thuộc Hibernate Types Maven sau trong dự án của bạn pom.xml tệp cấu hình:

<dependency>
    <groupId>com.vladmihalcea</groupId>
    <artifactId>hibernate-types-52</artifactId>
    <version>${hibernate-types.version}</version>
</dependency>

Giả sử bạn có bảng này trong cơ sở dữ liệu của mình:

create table event (
    id int8 not null, 
    version int4, 
    sensor_names text[], 
    sensor_values integer[], 
    primary key (id)
)

Và bạn muốn ánh xạ nó như thế này:

@Entity(name = "Event")
@Table(name = "event")
@TypeDefs({
    @TypeDef(
        name = "string-array", 
        typeClass = StringArrayType.class
    ),
    @TypeDef(
        name = "int-array", 
        typeClass = IntArrayType.class
    )
})
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
}

string-arrayint-array là các loại tùy chỉnh có thể được xác định trong BaseEntity lớp cha:

@TypeDefs({
    @TypeDef(
        name = "string-array", 
        typeClass = StringArrayType.class
    ),
    @TypeDef(
        name = "int-array", 
        typeClass = IntArrayType.class
    )
})
@MappedSuperclass
public class BaseEntity {

    @Id
    private Long id;

    @Version
    private Integer version;

    //Getters and setters omitted for brevity
}

StringArrayTypeIntArrayType là các lớp được cung cấp bởi dự án Hibernate Types.

Thời gian kiểm tra

Bây giờ, khi bạn chèn một vài thực thể;

Event nullEvent = new Event();
nullEvent.setId(0L);
entityManager.persist(nullEvent);
 
Event event = new Event();
event.setId(1L);
event.setSensorNames(
    new String[] {
        "Temperature", 
        "Pressure"
    }
);
event.setSensorValues( 
    new int[] {
        12, 
        756
    } 
);
entityManager.persist(event);

Hibernate sẽ tạo ra các câu lệnh SQL sau:

INSERT INTO event (
    version, 
    sensor_names, 
    sensor_values, 
    id
) 
VALUES (
    0, 
    NULL(ARRAY), 
    NULL(ARRAY), 
    0
)
     
INSERT INTO event (
    version, 
    sensor_names, 
    sensor_values, 
    id
) 
VALUES ( 
    0, 
    {"Temperature","Pressure"}, 
    {"12","756"}, 
    1
)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thực hiện WHERE IN trên nhiều cột trong Postgresql

  2. Buổi gặp mặt PostgreSQL ở Prague

  3. Chuyển đổi loại. Tôi phải làm gì với giá trị PostgreSQL OID trong libpq trong C?

  4. Cách tạo Người dùng / Cơ sở dữ liệu trong tập lệnh cho Docker Postgres

  5. PostgreSQL 'KHÔNG VÀO' và truy vấn con