김영한님이 지음, [자바 ORM 표준 JPA 프로그래밍] 책을 읽고 정리한 필기입니다.📢

DDL(Data Definition Language)

DDL이란 JPA가 Entity 클래스를 확인하여 데이터베이스 스키마를 자동으로 생성하는 기능

  • 매핑 정보와 데이터베이스 방언을 사용하여 스키마 생성
  • 개발자가 테이블을 직접 생성하는 수고를 덜 수 있음
  • But, 운영 환경에서 사용할 만큼 완벽하지 않음 → 참고용으로만 사용 권장
    • 개발 초기 단계는 create 또는 update
    • 초기화 상태로 자동화 테스트 환경은 create 또는 create-drop
    • 테스트 서버는 update 또는 validate
    • 스테이징과 운영 서버는 validate 또는 none

hibernate.hbm2ddl.auto 속성

옵션 설명
create 기존 테이블을 삭제하고 새로 생성, DROP + CREATE
create-drop Create 속성에 추가로 애플리케이션을 종료할 때 생성한 DDL을 제거, DROP + CREATE+ DROP
update 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 변경 사항만 수정
validate 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있으면 경고를 남기고 애플리케이션을 실행하지 않는다. 이 설정은 DDL을 수정하지 않는다.
none 자동 생성 기능을 사용하지 않으려면 hibernate.hbm2ddl.auto 속성 자체를 삭제하거나 유효하지 않은 옵션 값을 주면 된다. (none == 유효하지 않은 값)

DDL 생성 기능

@Column 매핑 정보의 속성 값으로 테이블의 제약 조건을 추가할 수 있음

  • nullable = false : 테이블의 not null 제약 조건 추가
  • length : 컬럼 데이터의 길이 제약 추가
1
2
3
4
5
6
7
8
9
10
11
@Entity
@Table(name="MEMBER")
public class Member{
    @Id
    @Column(name = "ID")
    private String id;

    @Column(name = "NAME", nullable = false, length = 10) //추가
    private String username;
    ...
}
1
2
3
4
5
6
7
8
9
10
create table MEMBER (
   ID varchar(255) not null,
    age integer,
    createdDate datetime,
    description longblob,
    lastModifiedDate datetime,
    roleType varchar(255),
    NAME varchar(10) not null, #추가 
    primary key (ID)
) engine=InnoDB

유니크 제약조건 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Entity
@Table(name="MEMBER", uniqueConstraints = {@UniqueConstraint(
        name = "NAME_AGE_UNIQUE",
        columnNames = {"NAME", "AGE"}
)})
public class Member {
    @Id
    @Column(name = "ID")
    private String id;

    @Column(name = "NAME", nullable = false, length = 10)
    private String username;
    ...
}
1
2
3
Hibernate:    
    alter table MEMBER 
       add constraint NAME_AGE_UNIQUE unique (NAME, age)

위와 같은 기능들은 단지 DDL을 자동으로 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.

JPA 카테고리 내 다른 글 보러가기

댓글남기기