728x90
Spring Data JPA + PostgreSQL을 사용중에 객체정보를 테이블에 저장할 필요가 있을 수 있습니다.
객체를 JSON String으로 변환하여 저장하는 방법도 있지만, 여기서는 JSONB 타입으로 저장하는 방법을 설명하겠습니다.
의존성 추가
먼저 Spring Data JPA 기반이 되는 Hibernate의 type을 추가하기 위하여 vladmihalcea의 hibernate-types를 추가합니다.
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.10.4</version>
</dependency>
TypeDef 추가
특정 타입에 사용되는 클래스를 정의하기 위하여 @TypeDef 어노테이션을 사용합니다.
사용위치는 Entity 클래스에 정의합니다.
package me.oofbird.jpa
import org.hibernate.annotations.TypeDef;
import com.vladmihalcea.hibernate.type.json.JsonBinaryType;
import javax.persistence.*;
@Entity
@Table(name = "TB_TEST")
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class TestTable {
...
}
또는 상위 패키지의 package-info.java에 정의하면 됩니다.
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
package me.oofbird.jpa;
import org.hibernate.annotations.TypeDef;
import com.vladmihalcea.hibernate.type.json.JsonBinaryType;
Jsonb 컬럼 정의
Jsonb 방식으로 저장할 컬럼을 정의합니다.
package me.oofbird.jpa
import org.hibernate.annotations.TypeDef;
import com.vladmihalcea.hibernate.type.json.JsonBinaryType;
import javax.persistence.*;
@Entity
@Table(name = "TB_TEST")
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class TestTable {
...
@Type(type = "jsonb")
@Column(name = "JSON_TEXT", columnDefinition = "jsonb")
private JsonPOJOObject jsonText;
...
}
반응형
'Spring' 카테고리의 다른 글
[Spring] 빈의 생명주기 (0) | 2022.06.15 |
---|---|
[JSON] Json에 클래스 상속 적용하기 (JsonSubType) (0) | 2021.03.31 |
[SpringBoot] 실행 스크립트 작성하기 (0) | 2020.03.30 |
[SpringBoot] JSON의 없는 속성 무시하기 (0) | 2019.07.10 |
[SpringBoot] Eclipse에서 pom.xml의 Unknown 오류 (0) | 2019.06.06 |