ホームページ  >  記事  >  Java  >  PostgreSQL の JSON 列を Hibernate エンティティのプロパティにマップする方法

PostgreSQL の JSON 列を Hibernate エンティティのプロパティにマップする方法

DDD
DDDオリジナル
2024-10-26 06:38:30977ブラウズ

How to Map JSON Columns in PostgreSQL to Hibernate Entity Properties?

PostgreSQL の JSON 列を Hibernate エンティティ プロパティにマッピングする

問題: JSON 列を Hibernate エンティティにマッピングする

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。