Note
Hibernate는 Postgresql의 Jsonb 타입을 지원하지 않는다. Jsonb 타입을 엔터티의 속성으로 적용하고 싶은 경우 hibernate-types-52 오픈 소스를 적용하거나, Hibernate의 UserType을 사용하여 커스텀한 Jsonb 타입을 구현해야한다.
Code
(1) 의존성 추가하기
dependencies {
compile('com.vladmihalcea:hibernate-types-52:2.10.0')
}
(2) Entity Class에 TypeDef 어노테이션 선언하기
(3) 프로퍼티에 jsonb Type, Column 어노테이션 선언하기
(4-1) 샘플 - JsonBinary 타입 선언하기
@Entity(name = "Event")
@Table(name = "event")
@TypeDef(name = "jsonb-node", typeClass = JsonBinaryType.class)
public static class Event {
@Type(type = "jsonb")
@Column(columnDefinition = "jsonb")
private Location location;
public Location getLocation() {
return location;
}
public void setLocation(Location location) {
this.location = location;
}
}
(4-2) 샘플 - JsonNodeBinary 타입 선언하기
@Entity(name = "Book")
@Table(name = "book")
@TypeDef(name = "jsonb-node", typeClass = JsonNodeBinaryType.class)
public static class Book {
@Id
@GeneratedValue
private Long id;
@NaturalId
private String isbn;
@Type(type = "jsonb-node")
@Column(columnDefinition = "jsonb")
private JsonNode properties;
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public JsonNode getProperties() {
return properties;
}
public void setProperties(JsonNode properties) {
this.properties = properties;
}
}
(4-4) 참고할 테스트 코드 위치
TMI
JsonNodeBinaryType, JsonNodeStringType 차이점
- JsonNodeStringType : MySQL 전용
- JsonNodeBinaryType : PostgreSQL 전용
참고
- https://vladmihalcea.com/how-to-map-json-objects-using-generic-hibernate-types/
- JsonNodeBinaryType VS JsonNodeStringType
- https://thorben-janssen.com/persist-postgresqls-jsonb-data-type-hibernate/
'소프트웨어-이야기 > 프로그래밍 언어와 프레임워크' 카테고리의 다른 글
Hibernate Query Plan Cache란? (0) | 2022.03.06 |
---|---|
Domain services vs Application services (0) | 2021.06.05 |
[Django] Django에서 MultiProccess 사용 시 주의사항 (0) | 2020.03.08 |
(Django) Django에서 Thread를 다룰 때 주의할 점 (0) | 2020.01.27 |
(Celery) 트랜잭션이 커밋된 이후에 Celery Task 전송하기 (4) | 2019.10.03 |