JPA๋ก PostgreSQL์ JSONB ์ปฌ๋ผ์ JSON ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ ํ ๋ Hypersistance Utils๋ฅผ ์ ์ฉํ์ฌ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
@Type(JsonType.class) โ
๊ณต์ ๋ฌธ์์ ์ค๋ช ๋์ด์๋ ๋๋ก JsonType ๊ณผ JsonBinaryType ์ ์ฌ์ฉํ ์ ์๋ค.
java
@Type(JsonBinaryType.class)
@Column(nullable = false, columnDefinition = "jsonb")
private Map<String, Object> metadata = new HashMap<>();
๋ง์ฝ, ์ปฌ๋ผ์ ๋ํ columnDefinition๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์๋์ ๊ฐ์ ๋งคํ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
sh
Caused by: org.hibernate.MappingException: Unable to determine SQL type name for column 'metadata' of table 'users' because there is no type mapping for org.hibernate.type.SqlTypes code: 1111 (OTHER)
@JdbcTypeCode(SqlTypes.JSON) โ
JsonType ๊ณผ JsonBinaryType ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค JdbcTypeCode์ ํ์ ์ JSON ์ผ๋ก ์ง์ ํ๋๊ฒ ๋ ๊ฐ๋จํ๋ค.
java
@JdbcTypeCode(SqlTypes.JSON)
private Metadata metadata;
@Data
public class Metadata {
private boolean active;
}
์๋งคํ์ผ๋ก PostgreSQL ์์์ Enum ์ปฌ๋ผ์ ๋ํ @JdbcType(PostgreSQLEnumJdbcType::class)๋ ํ์ธํด๋ด์ผ๊ฒ ๋ค?