PostgreSQL JSON 列を Hibernate エンティティにマッピングする
PostgreSQL データベースを操作する場合、JSON 形式でデータを保存する列がよく発生します。 Hibernate を使用してこれらの列を Java エンティティに効果的にマッピングするには、適切なデータ型を選択することが不可欠です。
この文脈では、当面の問題は、PostgreSQL JSON 列を Hibernate エンティティ フィールドにマッピングすることを中心に展開します。一般的なアプローチは、提供されたコード スニペットに示すように、String フィールドを使用することです。
<code class="java">@Entity public class MyEntity { private String jsonPayload; public MyEntity() { } }</code>
ただし、このアプローチでは、Hibernate が String を JSON に変換しようとするため、エンティティを保存するときに例外が発生する可能性があります。
JSON 列の正しい値の型
PostgreSQL JSON 列を Hibernate エンティティ フィールドに正しくマップするには、カスタム ユーザー タイプの使用を検討してください。 StringJsonUserType などの userType 実装を作成すると、String 値と JSON データベース タイプの間のマッピングを処理できます。
サンプル実装を次に示します。
<code class="java">public class StringJsonUserType implements UserType { ... @Override public int[] sqlTypes() { return new int[] { Types.JAVA_OBJECT}; } ... }</code>
その後、エンティティに注釈を付けることができます。カスタム userType:
<code class="java">@Type(type = "StringJsonObject") public String getJsonPayload() { return jsonPayload; }</code>
追加構成
このソリューションを完全に実装するには、次のことが必要になる場合があります:
<code class="java">public class JsonPostgreSQLDialect extends PostgreSQL9Dialect { ... this.registerColumnType(Types.JAVA_OBJECT, "json"); ... }</code>
<code class="java">@TypeDefs({ @TypeDef( name= "StringJsonObject", typeClass = StringJsonUserType.class)})</code>
GitHub リファレンス プロジェクト
さらに詳しく調べるには、https://github.com で提供されている GitHub プロジェクトを検討してください。 /timfulmer/hibernate-postgres-jsontype
以上がカスタム ユーザー タイプを使用して PostgreSQL JSON 列を Hibernate エンティティにマップする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。