JPA
DB 스키마 자동 생성
CodeMania
2021. 2. 14. 22:39
JPA는 설정에 따라서 DDL을 애플리케이션 실행 시점에 자동으로 생성해준다.
먼저 Spring Boot의 경우 application.properties나 application.yml에서 적당히 설정해주면 된다.
나의 경우 Spring을 얹지 않은 순수 JPA 프로젝트로 연습해보고 있고, persistence.xml에 다음과 같이 설정해줬다.
<property name="hibernate.hbm2ddl.auto" value="create" />
value | 동작 |
create | Entity에 해당하는 기존 table 삭제 후 Entity에 맞게 DDL문을 생성한다. |
create-drop | create와 똑같이 동작하고, 애플리케이션 종료 시점에 Entity에 해당하는 테이블들을 삭제한다. |
update | 변경된 부분만 DB에 반영한다.(drop은 실행하지 않는다.) |
validate | 엔티티와 테이블이 정상 매핑되었는지만 검사한다. |
none | 아무 동작도 하지 않는다. |
코드를 통해서 살펴보자~~~
엔티티로는 아래 코드를 사용했다. 필요하면 참고하자~~~
package hellojpa;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.*;
import java.util.Date;
@Getter
@Setter
@NoArgsConstructor
@Entity
@Table(name = "MEMBER")
public class Member {
@Id
private Long id;
@Column(name = "name")
private String username;
private Integer age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
public Member(Long id, String name) {
this.id = id;
this.username = name;
}
}
create
create-drop
create와 create-drop 모두 보면 알겠지만, 테이블을 일단 drop하기때문에 절대 운영 서버에서는 사용해서는 안 되는 옵션이다.
update
update는 변경사항이 없으면 아무 것도 하지 않기때문에 적당히 department 필드를 추가하여 Test했다.
validate
validate는 엔티티와 Table이 정상 매핑되었을 경우 예외없이 실행되고, 그렇지 않으면 예외를 발생시킨다.
description의 Type을 Integer로 바꾼 뒤 실행해보면 다음과 같은 예외가 터지는 것을 볼 수 있다.
none - 아무 것도 안 하는 옵션. 직접 확인해보자~~~
**** create, create-drop, update는 운영 서버에서는 사용하지 않는 것을 권장한다. 어떤 봉변을 당할지 알 수 없기때문에......
그래도 개발초기 단계에 table 변형이 잦을 때는 update를, 그 후 안정된 개발서버에서 validate를 쓰는 건 나쁘지 않다고 생각한다.