티스토리 뷰
스키마 자동 생성 관련하여 추가적인 정보 및 소스 코드는 이 포스팅을 참고하세요.
JPA는 데이터베이스 스키마를 자동으로 생성하는 기능을 지원합니다. 클래스의 매핑 정보를 분석하여 어떤 테이블이 어떤 칼럼을 사용하는지 알 수 있고 데이터베이스 방언(dialect)에 따라 해당 데이터베이스에 맞는 스키마를 생성할 수 있습니다.
데이터베이스 방언이란?
데이터 타입이나 함수명, 페이징 처리 등 각 데이터베이스가 제공하는 고유 기능을 JPA에서는 방언(dialect)이라고 부릅니다. 개발자가 특정 데이터베이스에 종속되는 기능을 많이 사용하면 나중에 데이터베이스를 교체하기 어려운데, 이러한 문제를 해결하기위해 아래와 같이 다양한 방언클래스를 제공합니다.
- H2: org.hibernate.dialect.H2Dialect
- oracle 10g: org.hibernate.dialect.Oracle10gDialect
- MySQL: org.hibernate.dialect.MySQL5InnoDBDialect
이외에도 다양한 방언 클래스를확인하실 수 있습니다.
스키마 자동 생성 기능 사용을 위해선 아래와 같은 설정이 필요합니다.
- application.properties
spring.jpa.hibernate.ddl-auto=create
- application.yml
spring:
jpa:
hibernate:
ddl-auto: create
# show-sql: true # DDL 출력
위 속성을 추가하면 어플리케이션 실행 시점에 데이터베이스 테이블을 자동으로 생성합니다.
spring.jpa.hibernate.ddl-auto 속성
- create: 기존 테이블을 삭제하고 새로 생성 (DROP - CREATE)
- create-drop: create와 동일하나 어플리케이션 종료시 테이블 삭제 (DROP - CREATE - DROP)
- update: 데이터베이스 테이블 - 엔터티 매핑정보를 비교해서 변경사항만 수정
- validate: 데이터베이스 테이블 - 엔터티 매핑정보를 비교해서 차이가있으면 어플리케이션을 실행하지 않음
- none: 자동 생성 기능을 사용하지 않음
Member라는 엔터티 클래스를 작성한 뒤 어플리케이션을 실행하면,
package com.example.demo;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Member {
@Id
private String id;
private String name;
private Integer age;
@Enumerated(EnumType.STRING)
private Role role;
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime createdDate;
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime updatedDate;
public enum Role {
ADMIN, USER
}
}
2019-09-30 15:45:19.784 DEBUG 13843 --- [ restartedMain] org.hibernate.SQL : create table member (id varchar(255) not null, age integer, created_date timestamp, name varchar(255), role varchar(255), updated_date timestamp, primary key (id))
Hibernate: create table member (id varchar(255) not null, age integer, created_date timestamp, name varchar(255), role varchar(255), updated_date timestamp, primary key (id))
이렇게 테이블을 생성해주는 로그를 확인할 수 있습니다.
하지만 운영환경에서 스키마 자동생성 기능을 사용하기엔 무리가 있으므로 개발환경이나 매핑 참고용 정도로만 사용하시는 것이 좋습니다.
'JPA' 카테고리의 다른 글
객체와 데이터베이스의 체계와 한계 (0) | 2020.04.02 |
---|---|
SQL의 문제점 (0) | 2020.04.01 |
JPA를 공부하는 이유 (2) | 2020.03.31 |
기본 키(Primary Key) 매핑 전략 (0) | 2019.10.01 |
JPA 매핑 어노테이션 (@Entity, @Table) (0) | 2019.09.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Spring Data JPA
- Linux
- 스프링 부트 회원 가입
- spring boot application
- 스프링 부트
- JSON
- Spring Boot JPA
- 스프링 부트 애플리케이션
- Java
- spring boot jwt
- 스프링 데이터 jpa
- leetcode
- spring boot app
- proto3
- 함께 자라기 후기
- 스프링 부트 튜토리얼
- r
- Jackson
- 스프링부트
- JPA
- Spring Boot
- 알고리즘
- gRPC
- @ManyToOne
- 헥사고날 아키텍처
- QueryDSL
- intellij
- Spring Boot Tutorial
- 함께 자라기
- 클린 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함