728x90
반응형
스프링부트와 DB를 연동해서 쓰다보면 가끔 외래키로 인해 문제가 발생하는 경우가 있다.
나같은 경우는 00시마다 PARK_DATA 테이블을 delete from 으로 초기화 시켜야하는데
연관되어 있는 외래키 때문에 아래와 같은 오류가 발생해 골치아팠다.
이를 해결하기 위해선 EntityManager 의 createNativeQuery 함수를 사용해야한다.
NativeQuery란?
다양한 이유로 JPQL을 사용할 수 없을 때,
JPA에서 NativeQuery를 통해 SQL을 직접 사용할 수 있는 기능을 제공.
SQL 구문인 SET FOREIGN_KEY_CHECKS = 0 을 사용하면 외래키 체크 설정을 해제할 수 있지만
JPQL에서 이와 같은 기능을 하는 문법은 찾을 수가 없었다.
그래서 SQL 구문을 직접 사용해 문제를 해결하기 위해 createQuery가 아닌 createNativeQuery를 사용하는 것이다.
사용법은 간단하다.
em.createNativeQuery("SET FOREIGN_KEY_CHECKS = 0").executeUpdate();
사용할 query
em.createNativeQuery("SET FOREIGN_KEY_CHECKS = 1").executeUpdate();
이런 식으로 사용하면 잠시동안 외래키 체크 설정을 해제하고 문법을 수행할 수 있다.
외래키를 무시하는 것이기 때문에 자주 사용해서는 좋지 않고
필요한 기능을 수행했다면 위와 같이 값을 다시 1로 바꾸어 원래 설정으로 돌려놓아야한다.
참고
https://data-make.tistory.com/616
728x90
반응형
'스터디' 카테고리의 다른 글
[SpringBoot] [트러블슈팅] 스프링부트 AWS 구성 설정(aws configure) (6) | 2022.01.11 |
---|---|
[SpringBoot] InstantiationException: No default constructor for entity (1) | 2022.01.06 |
[SpringBoot] 스프링 파일 사이즈 제한 오류 - FileSizeLimitExceededException (2) | 2021.12.30 |
[SpringBoot] @RequestBody란? (0) | 2021.12.24 |
[SpringBoot] @RestController 로 Rest API 구축하기! (2) | 2021.12.22 |