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

DDD
リリース: 2024-10-26 06:38:30
オリジナル
976 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!