일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 자바
- 스프링 부트
- MSA
- HTTP
- 코드리뷰
- 프리코스
- 의존성
- CircuitBreaker
- 스프링부트
- 레벨2
- 미션
- REDIS
- JPA
- Docker
- AOP
- AWS
- Paging
- JUnit5
- 우아한테크코스
- mock
- 우아한세미나
- 서블릿
- Spring Batch
- 우테코
- 트랜잭션
- 프로그래머스
- 세션
- 백준
- Level2
- yml
Archives
- Today
- Total
늘
[JPA] hibernate.ddl-auto 설정 본문
728x90
hibernate.ddl-auto 옵션은 Entity객체를 참고하여 애플리케이션 실행 시점에 하이버네이트에서 자동으로 DDL을 만들어주는 옵션이다.
JPA 테스트 도중 fk 제약조건이 걸린 엔티티를 생성할 때, 아래 설정처럼 create를 하니 에러가 발생했다.
ddl-auto 옵션
- create: 기존테이블 삭제 후 다시 생성 + 닫을 때 삭제하지 않는다.
- create-drop: create와 같으나 종료시점에 테이블 DROP
- update: 하이버네이트는 주어진 엔티티 구조에 따라서 데이터베이스를 변경한다.
- validate: 엔티티와 테이블이 정상 매핑되었는지만 확인
- none: 어떠한 변화도 주지 않는다.mysql에서 default이다.
ddl-auto의 옵션의 시작은 create or update로 시작해야한다. 왜냐하면 처음에는 테이블의 스키마가 없기 때문이다.
The spring.jpa.hibernate.ddl-auto is a special case, because, depending on runtime conditions, it has different defaults. If an embedded database is used and no schema manager (such as Liquibase or Flyway) is handling the DataSource, it defaults to create-drop. In all other cases, it defaults to none.
The dialect to use is detected by the JPA provider. If you prefer to set the dialect yourself, set the spring.jpa.database-platform property.
내장된 db가 사용되거나 flyway와 같은 스키마 manager가 없으면 default로 create-drop으로 지정이 된다. ex)h2
다른 모든 경우에는 none이 적용된다고 한다.ex)mysql
에러 발생
CommandAcceptanceException: Error executing DDL " alter table {table} drop foreign key ~
1. 해결 방법
create나 create-drop을 하면 테이블을 drop을 하고 create를 한다. 이때 테이블을 먼저 drop을 한다.
이후 table을 create하기 전에 alter table 구문으로 foreign key를 생성하는데 이미 테이블이 제거되어서 테이블이 없다고 에러가 발생한다.
따라서 ddl-auto : update로 변경하면 변경 부분만 반영되므로 해결이 된다.
https://spring.io/guides/gs/accessing-data-mysql
728x90
'우아한테크코스 4기' 카테고리의 다른 글
SQL Injection 그리고 PreparedStatement (2) | 2022.09.17 |
---|---|
AOP에 대한 사실과 오해 그런데 트랜잭션을 사알짝 곁들인.. (0) | 2022.09.11 |
[JPA]EnableJpaAuditing을 Application 위에 쓰면 안되는 이유 (0) | 2022.07.12 |
[h2]DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE; (0) | 2022.07.10 |
[Transactional]Spring 프레임워크는 트랜잭션을 어떻게 구현하였는가? (0) | 2022.07.10 |
Comments