PostgreSQL に保存されている JSON データを Hibernate エンティティにマッピングするプロパティは難しい場合があります。列をエンティティの String フィールドにマップしようとすると、エンティティの保存中に例外が発生し、文字の変化 (文字列) を JSON に変換できないことが示されます。
JSON 列を Hibernate エンティティに効果的にマップするには、カスタム ユーザー タイプを定義する必要があります。この型は、文字列値とデータベースで使用される JSON データ型の間で変換を行います。
1. PostgreSQL 方言の拡張:
「json」タイプを認識するようにデフォルトの PostgreSQL 方言を拡張します:
<code class="java">public class JsonPostgreSQLDialect extends PostgreSQL9Dialect { public JsonPostgreSQLDialect() { super(); this.registerColumnType(Types.JAVA_OBJECT, "json"); } }</code>
2.ユーザータイプの実装:
カスタム マッピングを定義するための org.hibernate.usertype.UserType インターフェイスの実装:
<code class="java">public class StringJsonUserType implements UserType { // ... implementation of required methods ... }</code>
3.エンティティとプロパティに注釈を付ける:
エンティティ クラス宣言と JSON マップされたプロパティに次の注釈を追加します:
<code class="java">@TypeDefs({@TypeDef(name = "StringJsonObject", typeClass = StringJsonUserType.class)}) ... @Type(type = "StringJsonObject") public String getJsonPayload() { ... }</code>
サンプル プロジェクト:
完全な実装例については、GitHub プロジェクトを参照してください: https://github.com/timfulmer/hibernate-postgres-jsontype
以上がPostgreSQL の JSON 列を Hibernate エンティティのプロパティにマップする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。