Spring
[JPA] PostgreSQL jsonb 타입 설정하기
까레까레
2021. 3. 30. 23:35
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;
...
}
반응형