JPA - PostgreSQL JSONB

JPA로 PostgreSQL의 JSONB 컬럼의 JSON 데이터를 처리하고자 할때 Hypersistance Utils를 적용하여 쉽게 해결할 수 있다.

@Type(JsonType.class)

공식 문서에 설명되어있는 대로 JsonTypeJsonBinaryType 을 사용할 수 있다.

@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)도 확인해봐야겠네?