PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Cara memetakan array PostgreSQL dengan Hibernate

Ketergantungan pakar

Hal pertama yang perlu Anda lakukan adalah menyiapkan dependensi Maven Jenis Hibernasi berikut di pom.xml proyek Anda file konfigurasi:

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

Dengan asumsi Anda memiliki tabel ini di database Anda:

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

Dan Anda ingin memetakannya seperti ini:

@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-array dan int-array adalah tipe khusus yang dapat didefinisikan dalam BaseEntity kelas super:

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

StringArrayType dan IntArrayType adalah kelas yang ditawarkan oleh proyek Tipe Hibernasi.

Waktu pengujian

Sekarang, ketika Anda memasukkan beberapa entitas;

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 akan menghasilkan pernyataan SQL berikut:

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. Gabungkan dua tabel menjadi tabel baru sehingga memilih baris dari tabel lainnya diabaikan

  2. Bagaimana Tand() Bekerja di PostgreSQL

  3. Kesalahan:Tidak ada modul bernama psycopg2.extensions

  4. Dapatkan Hari Pertama Bulan Ini di PostgreSQL

  5. Memanggil fungsi atau prosedur yang tersimpan tidak akan memasukkan dan mempertahankan perubahan