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

Ánh xạ ngủ đông giữa PostgreSQL enum và Java enum

Bạn có thể chỉ cần lấy các loại này thông qua Maven Central bằng cách sử dụng phụ thuộc Loại Hibernate:

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

Nếu bạn dễ dàng ánh xạ Java Enum thành loại cột PostgreSQL Enum bằng cách sử dụng Loại tùy chỉnh sau:

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

Để sử dụng nó, bạn cần chú thích trường bằng @Type Hibernate chú thích như được minh họa trong ví dụ sau:

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

Ánh xạ này giả sử bạn có post_status_info nhập enum trong PostgreSQL:

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

Vậy đó, nó hoạt động như một cái duyên. Đây là bài kiểm tra trên GitHub chứng minh điều đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django mô hình một khóa ngoại cho nhiều bảng

  2. Nối nhiều hàng trong một mảng với SQL trên PostgreSQL

  3. Tại sao giá trị NULL lại xuất hiện đầu tiên khi đặt hàng DESC trong một truy vấn PostgreSQL?

  4. Truy vấn bỏ qua khoảng trắng

  5. Mảng PostgreSQL của các phần tử mà mỗi phần tử là một khóa ngoại