JPA - PostgreSQL JSONB
JPA로 PostgreSQL의 JSONB 컬럼의 JSON 데이터를 처리하고자 할때 Hypersistance Utils를 적용하여 쉽게 해결할 수 있다.
@Type(JsonType.class)
공식 문서에 설명되어있는 대로 JsonType 과 JsonBinaryType 을 사용할 수 있다.
@Type(JsonBinaryType.class)
@Column(nullable = false, columnDefinition = "jsonb")
private Map<String, Object> metadata = new HashMap<>();
만약, 컬럼에 대한 columnDefinition를 지정하지 않으면 아래와 같은 매핑 오류가 발생할 수 있다.
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 으로 지정하는게 더 간단하다.
@JdbcTypeCode(SqlTypes.JSON)
private Metadata metadata;
@Data
public class Metadata {
private boolean active;
}
자매품으로 PostgreSQL 에서의 Enum 컬럼에 대한 @JdbcType(PostgreSQLEnumJdbcType::class)도 확인해봐야겠네?