본문 바로가기
Java/JPA

[JPA_Basic] 데이터베이스 스키마 자동 생성

by HJ0216 2023. 7. 31.

이 글은 김영한의 [자바 ORM 표준 JPA 프로그래밍 - 기본편] 수강하며 정리한 글입니다.

 

👉 기본 환경

- Language: Java

- IDE: IntelliJ

 

JPA에서는 DDL을 애플리케이션 실행 시점에 자동 생성해주는 기능을 보유

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

 

데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="create" />
<!--
    create table Member (
       id bigint not null,
        age integer not null,
        name varchar(255),
        primary key (id)
    )
-->
 
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create" />
<!--
    create table Member (
       id number(19,0) not null,
        age number(10,0) not null,
        name varchar2(255 char),
        primary key (id)
    )
-->
 
 
 

 

⭐ 이렇게 생성된 DDL은 개발 장비에서만 사용

생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용

 

hibernate.hbm2ddl.auto 옵션

- create: 기존테이블 삭제 후 다시 생성 (DROP + CREATE)

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

 

- create-drop: create와 같으나 종료시점에 테이블 DROP

1
2
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
 
 
 

 

- update: 변경분만 반영

1
2
<property name="hibernate.hbm2ddl.auto" value="update" />
 
 
 

Entity에서 필드 추가 시, alter DDL이 자동 생성되어 column이 생성되지만 필드를 삭제한다고 column이 삭제되진 않음

 

- validate: 엔티티와 테이블이 정상 매핑되었는지만 확인

1
2
<property name="hibernate.hbm2ddl.auto" value="validate" />
 
 
 

* 테이블에 매칭되지 않는 필드 존재 시, 오류 발생

(반대의 경우로, 엔티티에 매칭되지 않는 컬럼 존재할 경우에는 오류 발생 X)

 

- none: 엔티티와 테이블이 정상 매핑되었는지만 확인

1
2
<property name="hibernate.hbm2ddl.auto" value="none" />
 
 
 

* none 대신 위의 4가지 옵션값이 아닌 값을 입력할 경우, hibernate.hbm2ddl.auto 실행 X

 

'Java > JPA' 카테고리의 다른 글

[JPA_Basic] 객체 지향 모델링  (0) 2023.08.08
[JPA_Basic] 기본키 매핑  (0) 2023.08.05
[JPA_Basic] Persistence Context 장점  (0) 2023.07.29
[JPA] @PrePersist  (0) 2023.06.25
[JPA] JOIN Null값 처리  (0) 2023.06.20