본문 바로가기

Spring

[JPA] PostgreSQL jsonb 타입 설정하기

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;
    
    ...
}

 

반응형