김영한님이 지음, [자바 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의 실행 로직에는 영향을 주지 않는다.
댓글남기기