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

Java Enums、JPA、Postgres enums-どうすればそれらを連携させることができますか?

    私は実際、PGObjectとConvertersを使用する方法よりも簡単な方法を使用しています。 Postgresでは、列挙型は非常に自然に変換されるため、テキストから、それが最も得意とすることを実行させる必要があります。彼が気にしないのであれば、私はアルジャンの気分の例を借ります:

    Postgresの列挙型:

    CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
    

    Javaのクラスと列挙型:

    public @Entity class Person {
    
      public static enum Mood {sad, ok, happy};
    
      @Enumerated(EnumType.STRING)
      Mood mood;
    

    }

    その@Enumeratedタグは、列挙型のシリアル化/逆シリアル化をテキストで実行する必要があることを示しています。それがないと、intを使用しますが、これは何よりも面倒です。

    この時点で、2つのオプションがあります。あなたのどちらか:

    1. stringtype =unspecifiedを追加します JDBC接続パラメータで説明されているように、これによりPostgresは右側のタイプを推測し、すべてを適切に変換できます。これは、「enum =unknown」のようなものを受け取るためです。これは、すでに何をすべきかを知っている式です(フィード左側のタイプのデシリアライザーの?値)。 これが推奨されるオプションです 一度に列挙などのすべての単純なUDTで機能するはずです。

      jdbc:postgresql://localhost:5432/dbname?stringtype=unspecified
      

    または:

    1. varcharからデータベース内の列挙型への暗黙的な変換を作成します。したがって、この2番目のケースでは、データベースは'enum =varchar'のような代入または比較を受け取り、内部カタログで、varcharのシリアル化関数とそれに続く逆シリアル化関数を介して右側の値を渡すことができるというルールを見つけます。列挙型。これは、必要以上のステップです。また、カタログに暗黙のキャストが多すぎると、任意のクエリの解釈があいまいになる可能性があるため、慎重に使用してください。キャストの作成は次のとおりです:

      暗黙のうちにINOUTを使用してキャストを作成します(文字は気分によって異なります)。

    それだけで動作するはずです。



    1. データベースがeコマースビジネスをサポートする方法

    2. トリガー関数内で、更新されているフィールドを取得する方法

    3. データを並べ替えないようにするにはどうすればよいですか?

    4. CSVファイルをSQLサーバーにアップロードする