JPA로 DB를 초기화하는 방법은 두 가지가 있다.
spring.jpa.generate-ddl
(boolean) switches the feature on and off and is vendor independent.spring.jpa.hibernate.ddl-auto
(enum) is a Hibernate feature that controls the behavior in a more fine-grained way. This feature is described in more detail later in this guide.
여기서 2. spring.jpa.hibernate.ddl-auto
를 통해 DB 초기화 전략을 만들 때 사용할 수 있는 옵션 값은 none
, update
, validata
, create
, create-drop
이 있다.
none
: No change to the database structure.update
: Hibernate changes the database according to the given Entity structures. - 변경된 스키마만 적용한다.validate
: 변경된 스키마가 있는지 확인만 한다. 만약 변경이 있다면 Application을 종료한다.create
: Creates the database every time, but don’t drop it when close. - 시작될 때만 drop하고 다시 생성한다.create-drop
: Creates the database then drops it when theSessionFactory
closes. - 시작과 종료에서 모두 drop한다.
아래 application.yml 파일의 일부는 테스트 환경에서 사용 중인 설정 예시이다. DB는 H2(In-Memory)를 사용하였고 create-drop
옵션을 사용하여 SessionFactory
가 종료될 때마다 drop 한다.
spring:
profiles: test
datasource:
url: jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
username: sa
password:
driverClassName: org.h2.Driver
jpa:
database-platform: H2
show-sql: true
hibernate:
ddl-auto: create-drop
사실 H2에서는 create-drop
이 default라 예시와 같이 명시적으로 쓰지 않아도 무관하다. 하지만 다른 DB를 테스트에서 사용하는 경우 대부분 none
이 default이므로 적절한 옵션 값으로 바꿔서 사용하면 된다.
The default for H2 and other embedded databases is create-drop, but for others like MySQL is none
Reference
'Dev > JPA' 카테고리의 다른 글
Kotlin으로 Spring Boot JPA 프로젝트에 Querydsl 적용하기 (0) | 2019.10.01 |
---|
댓글