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
인수는 컬럼에 대한 설명인 value
밖에 없는 아주 단순한 어노테이션입니다.
보시다시피 @Comment
를 사용하면 ddl-auto
를 사용할 때 ColumnBuilder
가 생성되는 DDL에 코멘트를 끼워넣어 주게 됩니다.
Reference
- HHH-4369 Introduce @Comment for comment on column #3611
- HHH-4369 Support @Comment or column attribute on @Table and @Column
- Spring Boot Releases Note - v2.6.0
- Spring Boot PR - Upgrade to Hibernate 5.6.1.Final #28574