「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > カスタム ユーザー タイプを使用して PostgreSQL JSON 列を Hibernate エンティティにマップする方法

カスタム ユーザー タイプを使用して PostgreSQL JSON 列を Hibernate エンティティにマップする方法

2024 年 11 月 8 日に公開
ブラウズ:184

How to Map PostgreSQL JSON Columns to Hibernate Entities Using a Custom User Type?

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

PostgreSQL データベースを使用する場合、データを JSON 形式で保存する列に遭遇することがよくあります。 Hibernate を使用してこれらの列を Java エンティティに効果的にマップするには、適切なデータ型を選択することが不可欠です。

この文脈では、当面の質問は、PostgreSQL JSON 列を Hibernate エンティティ フィールドにマッピングすることを中心に展開します。一般的なアプローチは、提供されたコード スニペットに見られるように、文字列フィールドを使用することです:

@Entity
public class MyEntity {

    private String jsonPayload;

    public MyEntity() {
    }
}

ただし、この方法では、Hibernate が文字列を JSON に変換しようとするため、エンティティを保存するときに例外が発生する可能性があります。

JSON 列の正しい値の型

PostgreSQL JSON 列を Hibernate エンティティ フィールドに正しくマップするには、カスタム ユーザー タイプの使用を検討してください。 StringJsonUserType などの userType 実装を作成すると、String 値と JSON データベース型の間のマッピングを処理できます。

実装例は次のとおりです。

public class StringJsonUserType implements UserType {
    ...
    @Override
    public int[] sqlTypes() {
        return new int[] { Types.JAVA_OBJECT};
    }

    ...
}

エンティティ プロパティにカスタム userType:

@Type(type = "StringJsonObject")
public String getJsonPayload() {
    return jsonPayload;
}

追加の構成

このソリューションを完全に実装するには、次のことが必要になる場合があります:

  1. JSON タイプを含めるように PostgreSQL 言語を拡張する:
public class JsonPostgreSQLDialect extends PostgreSQL9Dialect {
    ...
    this.registerColumnType(Types.JAVA_OBJECT, "json");
    ...
}
  1. エンティティ クラスに @TypeDefs の注釈を付けます:
@TypeDefs({ @TypeDef( name= "StringJsonObject", typeClass = StringJsonUserType.class)})
  1. 高度なユーザータイプの実装に必要なライブラリを挿入しますマッピング.

GitHub リファレンス プロジェクト

さらに詳しく調べるには、https://github.com/timfulmer/hibernate-postgres- で提供されている GitHub プロジェクトを検討してください。 jsontype

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3