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

Pemetaan hibernasi antara Enum PostgreSQL dan Java enum

Anda cukup mendapatkan tipe ini melalui Maven Central menggunakan dependensi Tipe Hibernasi:

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

Jika Anda dengan mudah memetakan Java Enum ke jenis kolom Enum PostgreSQL menggunakan Jenis kustom berikut:

public class PostgreSQLEnumType extends org.hibernate.type.EnumType {
     
    public void nullSafeSet(
            PreparedStatement st, 
            Object value, 
            int index, 
            SharedSessionContractImplementor session) 
        throws HibernateException, SQLException {
        if(value == null) {
            st.setNull( index, Types.OTHER );
        }
        else {
            st.setObject( 
                index, 
                value.toString(), 
                Types.OTHER 
            );
        }
    }
}

Untuk menggunakannya, Anda perlu membubuhi keterangan bidang dengan Hibernate @Type anotasi seperti yang diilustrasikan dalam contoh berikut:

@Entity(name = "Post")
@Table(name = "post")
@TypeDef(
    name = "pgsql_enum",
    typeClass = PostgreSQLEnumType.class
)
public static class Post {
 
    @Id
    private Long id;
 
    private String title;
 
    @Enumerated(EnumType.STRING)
    @Column(columnDefinition = "post_status_info")
    @Type( type = "pgsql_enum" )
    private PostStatus status;
 
    //Getters and setters omitted for brevity
}

Pemetaan ini mengasumsikan Anda memiliki post_status_info ketik enum di PostgreSQL:

CREATE TYPE post_status_info AS ENUM (
    'PENDING', 
    'APPROVED', 
    'SPAM'
)

Itu saja, ia bekerja seperti pesona. Berikut pengujian di GitHub yang membuktikannya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sqlalchemy.exc.NoSuchModuleError:Tidak dapat memuat plugin:sqlalchemy.dialects:postgres

  2. Indeks Huruf Kecil Flask-SQLAlchemy - melewatkan fungsional, tidak didukung oleh refleksi SQLAlchemy

  3. Beralih peran setelah terhubung ke database

  4. Sekarang() tanpa zona waktu

  5. Beberapa koneksi database di Rails