Hibernate 5.6 - @Comment

Hibernate 5.6 - @Comment

JPA 사용 시 테이블 컬럼에 컬럼 설명 작성하기


@Comment


Hibernate 저장소에 끝내주는 PR이 하나 들어와 있었습니다.

바로 @Comment를 소개한다는 내용의 PR 이었는데요.

일단 이 기능은 현재 최신 안정버전인 Hibernate 5.6+부터 사용하실 수 있으며, Spring Boot 2.6부터 Hibernate 5.6을 의존합니다.

Spring Data JPA에서 사용하는 Hibernate는 원래 테이블 컬럼에 대한 코멘트 자동 작성을 정식으로 지원하지 않았습니다.

대신 다음과 같이 JPA 자체 스펙인 columnDefinition을 통해 작성할수는 있었으나, 하드코딩을 해야 한다는 문제(오탈자 위험도 높음), 특정 DB 벤더에 종속되는 문제 등이 있었습니다.

즉, columnDefinition는 일반적으로 거의 사용하지 않는 옵션입니다.


@Entity
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(columnDefinition = "varchar(10) not null comment 'this is name'")
    private String name;
}


Hibernate: 
    drop table if exists member
Hibernate: 
    create table member (
       id bigint not null auto_increment,
        name varchar(10) not null comment 'this is name',
        primary key (id)
    ) engine=InnoDB


그리고 위의 이유 때문만은 아니지만, 일반적으로 DDL은 너무 중요하기 때문에 따로 작성하여 관리하기도 하고요.

그럼에도 불구하고 저는 초창기 개발환경에서 ddl-auto: create, create-drop, update 등의 옵션을 사용하는것을 매우 선호하기 때문에 이 부분이 약간 아쉽긴 했었습니다.


이번에 Hibernate 5.6에 들어온 @Comment는 다음과 같은 기능을 지원합니다.


@Entity
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Comment("this is name")
    @Column(length = 10, nullable = false)
    private String name;
}


Hibernate: 
    drop table if exists member
Hibernate: 
    create table member (
       id bigint not null auto_increment,
        name varchar(10) not null comment 'this is name',
        primary key (id)
    ) engine=InnoDB


image

@Comment로 생성된 컬럼 코멘트


인수는 컬럼에 대한 설명인 value 밖에 없는 아주 단순한 어노테이션입니다.

보시다시피 @Comment를 사용하면 ddl-auto를 사용할 때 ColumnBuilder가 생성되는 DDL에 코멘트를 끼워넣어 주게 됩니다.


Reference




© 2022. All rights reserved.