🍴

【Java】「SqlTypes.JSON」を使用してEntityでJsonの列を扱う( Hibernate 6以降)

に公開

概要

Hibernateのentityでjson型のデータを扱う時にHow to map Oracle JSON columns using JPA and Hibernateの記事で紹介されているような、hypersistence-utilsのライブラリを使う方法が対応の一つとして挙げられます。これは文字列をjsonに自動でシリアライズしてくれて便利ではあります。
もう一つの方法としてはHibernate 6以降に実装された、PostgreSQL Hibernate 6 JSON Exampleで紹介されている、SqlTypes.JSONのアノテーションを付与する方法が挙げられます。これはHibernateの標準で使えることもあり、今回はこの方法で実装を試してみました。

前提

  • 使用したhibernateのバージョンは6.6.15です。
  • SpingBoot環境で実行して、使用したSpingBootのバージョンは3.5.0です。

サンプル実装

今回は特に複雑な構造を扱わないので、シンプルにMap型を設定しました。なお、こちらのstackoverflowの記事で紹介されている通り、JsonNode型も扱えるそうです。

@JdbcTypeCode(SqlTypes.JSON)
@Column(name = "dead_line_check_sub_setting", nullable = true)
private Map<String, Object> deadLineCheckSubSetting;

Discussion