[JPA] 데이터베이스 스키마 자동생성
14 Jun 2022해당 포스트는 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 듣고 정리한 글입니다.
데이터베이스 스키마 자동생성
- DDL을 애플리케이션 실행 시점에 자동생성
- 테이블 중심에서 객체 중심 으로 설계를 할 수 있음.
- 데이터 베이스 방언(dialect)을 활용해서 JPA가 데이터베이스에 맞는 적절한 DDL 생성
- 이렇게 생성된 DDL은 개발 장비에서만 사용 해야 한다. (실수로 운영에서 쓰다가는 테이블이 날라갈수 있다.)
데이터베이스 스키마 자동생성 - 속성
hibernate.hdm2ddl.auto
- create : 기존 테이블 삭제 후 다시생성 (DROP + CREATE)
<property name="hibernate.hdm2ddl.auto" value="create"/>
기존 테이블을 삭제후 다시 생성한다.
drop table if exists Member CASCADE
create table Member (
id bigint not null,
name varchar(255),
primary key (id)
)
- create-drop : create와 같으나 종료시점에 테이블 DROP
<property name="hibernate.hdm2ddl.auto" value="create-drop"/>
drop table if exists Member CASCADE
create table Member (
id bigint not null,
name varchar(255),
primary key (id)
)
select
member0_.id as id1_0_0_,
member0_.name as name2_0_0_
from
Member member0_
where
member0_.id=?
drop table if exists Member CASCADE
- update : 변경분만 반영(운영 DB에는 사용하면 안됨)
- validate : 엔티티와 테이블이 정상 매핑 되었는지만 확인
- none : 사용하지 않음
주의 할점
- 운영 장비에는 절대 create, create-drop, update 사용하면 안된다. 잘못하면 데이터가 날라간다..
- 개발 초기단계에는 create 또는 update
- 테스트 서버에는 update 또는 validate
- 스테이징과 운영 서버에는 validate 또는 none
DDL 생성 기능
- 제약 조건 추가 : 예시) 회원 이름은 필수, 10자 초과 X
@Column(nullable = false, length = 10)
- 유니크 제약조건 추가
@Table(uniqueConstraints = (@UniqueConstraint(name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"})))
- DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA가 실행 되는 동안의 로직에는 영향을 주지 않는다.