JPA에서는 테이블을 자동생성해주는 기능이 존재한다
자동생성옵션은 아래와 같다
스키마 자동생성 옵션
- create
- 애플리케이션 시작 시에 기존 테이블을 Drop 한 뒤, 테이블을 생성
- create-drop
- 애플리케이션 시작 시에 테이블을 생성한 뒤, 애플리케이션 종료 시에 테이블을 Drop
- update
- 테이블에 변경사항이 있다면 Update(컬럼추가, 제약조건 추가 등)
- 컬럼 삭제는 안 됨
- validate
- 테이블과 엔티티 매핑정보가 일치한 지 검증
- 일치하지 않을 경우 에러 발생
- none
- 아무동작 하지 않음
- none 자체는 아무의미 없음
- "asdl;kfj;asdkljfl;adksjfkl;j"와 같은 문자열을 입력한 거랑 동일함
운영환경 별 권장옵션
운영환경 | 권장옵션 |
개발 | create, update |
테스트 | update, validate |
스테이징 | validate, none |
운영 | validate, none |
위와 같이 권장옵션을 적어놓았지만
왠만하면 validate나 none을 쓰는 게 안전하다
생각해보라,
아무리 조심해서 사용한다 해도
개발자의 실수로
운영DB에 있는 수 천만건의 데이터가 날라가면 얼마나 끔찍하겠는가?
스키마 자동생성 옵션 설정방법
스키마 자동생성 옵션을 설정하는 방법은 아래와 같다
1. persistence.xml 이용하는 방법
- hibernate.hbm2ddl.auto라고 된 부분의 Value를 변경하면 된다
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/Documents/spring_trainning/inflearn/JPA/jpaprac"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
<!-- 스키마 자동생성옵션 설정하는 부분 -->
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
</persistence>
2. application.yml 이용하는 방법
spring:
jpa:
database: mysql
#스키마 자동생성옵션 설정하는 부분
hibernate:
ddl-auto: create
DDL 생성 시 테이블 속성 지정
아래와 같이 테이블 생성 시 속성을 지정할 수 있다
@Entity
@Getter @Setter
//테이블 이름 지정
@Table(name="MBR")
public class Member {
@Id
@GeneratedValue
private Long id;
//컬럼 이름과 제약조건 설정
@Column(name="name", unique = true, length = 20)
private String username;
private Integer age;
}
'Spring > JPA' 카테고리의 다른 글
Entity-Table 매핑 - 필드 매핑(@Enumerated) (0) | 2023.02.23 |
---|---|
Entity-Table 매핑 - 필드 매핑(@Column) (0) | 2023.02.23 |
Entity-Table 매핑 - Entity와 테이블 매핑방법 (0) | 2023.02.12 |
영속성 컨텍스트 이점 (0) | 2023.02.12 |
엔티티의 생명주기 (0) | 2023.02.12 |
댓글