JPA를 사용하면 Entity 클래스를 반영하여 어플리케이션 실행 시점에 자동으로 DDL을 생성하고, 실제 데이터베이스의 테이블에 자동으로 스키마를 반영한다.
<property name="hibernate.hbm2ddl.auto" value="create" />
persistence.xml을 사용하여 설정하는 경우에는 다음과 같이 value 값으로 옵션을 지정할 수 있다.
create : 기존 테이블을 drop 후 다시 생성한다.
create-drop : create와 같지만 어플리케이션 종료 시점에 테이블을 drop한다. 테스트 케이스 실행 시에 사용한다.
update : 테이블을 drop하지 않고 alter로 변경 사항을 업데이트 하고 싶을 때 사용한다. 하지만 추가될 때만 반영된다.
validate : 엔티티와 테이블이 정상적으로 매핑되었는지 확인할 때 사용한다.
none : 기능을 사용하지 않는다. 설정 태그를 삭제하는 것과 같다.
이 옵션들은 테이블 변경이 자동으로 반영되어 데이터 손실의 위험이 있다. 그래서 실제 운영 환경에서는 사용하지 않는 것이 좋다.
create, create-drop, update 등을 사용하면 어플리케이션 실행 시 자동으로 테이블을 생성, 업데이트, 삭제하게 되고 이는 운영에 큰 문제를 일으킬 수 있다.
개발 초기에는 코드와 테이블이 자주 변경되기 때문에 로컬 또는 개발 환경에서 create와 update 옵션을 사용해도 괜찮다.
테스트 서버에서 테스트를 실행하면서 create를 사용하면 테이블의 drop과 생성의 반복이 되고, 결국 데이터의 손실을 불러온다.