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;
}
追加の構成
このソリューションを完全に実装するには、次のことが必要になる場合があります:
public class JsonPostgreSQLDialect extends PostgreSQL9Dialect {
...
this.registerColumnType(Types.JAVA_OBJECT, "json");
...
}
@TypeDefs({ @TypeDef( name= "StringJsonObject", typeClass = StringJsonUserType.class)})
GitHub リファレンス プロジェクト
さらに詳しく調べるには、https://github.com/timfulmer/hibernate-postgres- で提供されている GitHub プロジェクトを検討してください。 jsontype
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3