sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQL列挙型とJava列挙型の間のHibernateマッピング

    これらのタイプは、Hibernateタイプの依存関係を使用してMavenCentralから簡単に取得できます。

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

    次のカスタムタイプを使用して、Java列挙型をPostgreSQL列挙型列タイプに簡単にマップする場合:

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

    これを使用するには、Hibernate @Typeでフィールドに注釈を付ける必要があります 次の例に示すような注釈:

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

    このマッピングは、post_status_infoがあることを前提としています PostgreSQLの列挙型:

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

    それだけです、それは魅力のように機能します。これがGitHubでのテストであり、それを証明しています。



    1. MariaDBでのNVL()の仕組み

    2. STRING_ESCAPE()関数がSQL Server(T-SQL)でどのように機能するか

    3. AmazonRDSマスターユーザーパスワードをリセットする方法

    4. クエリ実行時間のpsycopg2ログを取得するにはどうすればよいですか?