@Type @TypeDef hibernate 6 이상

Jae·2024년 8월 11일

사용자 정의 타입을 정의해서 데이터베이스에 사용해보기 위해 Hibernate의 @Type @TypeDef을 사용하려고 했습니다. 제가 참고했던 자료는 Hibernate버전이었고 제 테스트 환경은 hibernate 버전이기 때문에 해당 애노테이션이 deprecate되었기에 새로운 버전에 맞춰 수정해야했습니다. 이 과정을 정리하였습니다.


@Type

사용자 정의 타입을 특정 엔티티 필드에 적용하는 데 사용된다. 이 어노테이션을 통해 Hibernate가 기본적으로 제공하지 않는 자료형을 사용할 수 있다.

@TypeDef

사용자 정의 타입을 정의하고, 해당 타입을 사용할 수 있도록 선언하는 데 사용된다. 이를 통해 다른 엔티티 필드에서도 동일한 사용자 정의 타입을 재사용할 수 있다.


hibernate 6 미만

기준 환경

  • springBoot : 2.6.7
  • Java : 11
// alarm entity
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class Alram {
    @Type(type = "jsonb")
    @Column(columnDefinition = "json")
    private AlarmArgs args;
}

hibernate 6 이상

기준환경

  • Hibernate : 6.5.2
  • Java: 11
@Convert(attributeName = "jsonb", converter = JsonBinaryType.class)
@Table(name = "alarm")
public class Alarm extends EntityDate {
  @JdbcTypeCode(SqlTypes.JSON)
  @Column(columnDefinition = "json")
  private AlarmArgs args;
}
  1. @Convert를 사용한다.
    AttributeConverter 인터페이스를 구현하여 사용자 정의 변환기를 정의하고, 이를 엔티티 필드에 @Convert 어노테이션으로 적용한다.
  2. @JdbcCodeType을 사용해서 변환한다.
    직접 JDBCType을 지정해서 변환한다.

참고

https://velog.io/@happyjamy/JPA-%EC%97%90%EC%84%9C-MySql-Json-%ED%83%80%EC%9E%85-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-hibernate-6-%EC%9D%B4%EC%83%81

0개의 댓글