PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Mapowanie hibernacji między enum PostgreSQL i enum w Javie

Możesz po prostu uzyskać te typy za pośrednictwem Maven Central, korzystając z zależności Hibernate Types:

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

Jeśli łatwo zmapujesz Java Enum na typ kolumny PostgreSQL Enum, używając następującego niestandardowego typu:

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 
            );
        }
    }
}

Aby z niego skorzystać, musisz dodać adnotację do pola za pomocą Hibernacji @Type adnotacja, jak pokazano w poniższym przykładzie:

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

To mapowanie zakłada, że ​​masz post_status_info typ wyliczenia w PostgreSQL:

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

To wszystko, działa jak urok. Oto test na GitHub, który to potwierdza.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zmienić schemat wielu tabel PostgreSQL w jednej operacji?

  2. PostgreSQL 11 - Procedury

  3. Jak odczytać wszystkie wiersze z ogromnego stołu?

  4. Szczegółowe informacje na temat dostawców chmury:PostgreSQL na DigitalOcean

  5. PostgreSQL:Wszechstronna INSERT