Java enumフィールドをPostgreSQL 9.6のenum列として保存しようとしています。フィールドを@Enumerated(STRING)
としてマップすると、Hibernateは単純にenum名を列として使用しますこれは、読み取りでは素晴らしく機能します(文字列表現を取得し、一致して戻ります)が、サーバーは、書き込み時に型の不一致について不平を言います:expression is of type character varying
。
PostgreSQL JDBCドライバー にはパラメーターstringtype
があり、サーバーに文字列値の適切な列タイプを推論し、stringtype=unspecified
を使用すると列挙値が正常に取得されます。ただし、JDBC接続文字列が外部から提供される環境にアプリケーションをデプロイするため、stringtype
プロパティを追加することは現実的ではありません。
デフォルトで接続をstringtype=unspecified
として扱うようにサーバーを構成する方法はありますか(SET
コマンドを使用するなど)?
残念ながら答えはノーです。 stringtype
はサーバーパラメータではありません。これは、JDBC独自のクライアントパラメータです。ここで機能を確認してください。
org.postgresql.jdbc.PgConnection.getStringVarcharFlag()
そしてここ
org.postgresql.jdbc.PgPreparedStatement.getStringType()
JDBCがVARCHAR
プロパティに従ってパラメータタイプをUNSPECIFIED
またはstringtype
タイプに設定することがわかります。