티스토리 뷰

테이블을 먼저 생성하고, 그 다음 엔티티를 생성했다.

하지만 데이터베이스 스키마 자동생성을 통해 엔티티만 만들고 테이블은 자동 생성 할 수 있다.

 

★ 데이터베이스 스키마 자동 생성

    - JPA는 이 매핑 정보와 데이터베이스 방언을 사용해서 데이터베이스 스키마를 생성한다.

 

    ※ 데이터베이스 방언이란?

    -  SQL 표준을 지키지 않거나 특정 데이터베이스만의 고유한 기능을 '방언'이라고 한다.

      JPA는 특정베이스에 종속적이지 않은 기술. 따라서 다른 데이터베이스로 교체 가능하다.

      만약 종속적이면 데이터베이스 교체하기 어렵다. 

      따라서, 하이버네이트 등의  JPA 구현체들은 다양한 데이터베이스 방언 클래스를 제공한다. 

 

☆ 스키마 자동 생성하는 법

   

persistence.xml 에 다음 속성을 추가한다.

 <property name="hibernate.hbm2ddl.auto" value="create" />

결과는 애플리케이션 실행 시점에 데이터베이스 테이블을 자동으로 생성한다. 

 

☆ 콘솔에 실행되는 테이블 생성 DDL을 출력하는 법

 

테이블이 자동으로 잘 생성되었는지 확인하기 위해 콘솔에 나타나는 법은

<property name="hibernate.show_sql" value="true" />

이 속성을 true로 설정해주면 된다. 

 

 

실행된 결과를 보자. 기존 테이블을 삭제하고 다시 생성한 것을 볼 수 있다. 

 

- 스키마 자동 생성 기능의 장점은 개발자가 테이블을 직접 생성하는 수고를 덜 수 있다는 것이다.

  하지만 자동 생성 기능이 만든 DDL은 운영 황경에서 사용할 만큼 완벽하지 않으므로 

  개발 환경에서 사용하거나 매핑을 어떻게 해야 하는지 참고하는 정도로만 사용하는 것이 좋다고 한다.

 

☆ hibernate.hbm2ddl.auto 속성 정리

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