테이블을 사용할 때 내용을 초기화 할 때가 있다.
그럴때는 truncate 테이블명 을 이용하는데, JPA에서 truncate table을 하는 방법을 알아보자.
인터넷 검색을 해보았고, MySQL문을 그대로 사용할 수 있는 방법을 찾아보았다.
@Query 어노테이션을 사용하여 value값에 원하는 쿼리문을 입력하고, nativeQuery 옵션을 true로 설정하면 SQL Query문을 사용할 수 있다한다.
QuestionRepository에 쿼리문을 메서드로 넣어주었고,
# QuestionRepository
@Transactional
@Modifying
@Query(value = "truncate question", nativeQuery = true)
void truncateQuestion();
📌 @Transactional : 트랜잭션 처리를 지원해주는 어노테이션
- 모든 작업들의 단위
- 오류 발생 시 되돌릴 수 있도록 도와준다.
📌@Modifying : Insert, Update, Delete(Select 제외) 쿼리에서 사용되는 어노테이션
실행해 보았는데,
이러한 오류가 발생한다.
어떠한 오류인지 알아보기 위해 직접 workbench를 이용해 실행해 보았다.
WorkBench에서는 foreign key가 설정되어 있어 truncate를 사용할 수 없다고 나와있다.
Answer과 foreign key로 연관되어 있기 때문에 설정을 끄는 방법을 찾았다.
SET FOREIGN_KEY_CHECKS = 0
이 쿼리문을 사용하면 foreign key 옵션을 잠시 꺼놓을 수 있다.
truncate 실행 전, foreign key 옵션을 끄기 위해 새로 메서드를 만들었다.
@Transactional
@Modifying
@Query(value = "SET FOREIGN_KEY_CHECKS = 0", nativeQuery = true)
void foreignOff();
그 후 다시 테스트 해보았다!
//
@Test
void truncateTable() {
questionRepository.foreignOff();
questionRepository.truncateQuestion();
}
결과는 성공적으로 나왔다!
'Spring' 카테고리의 다른 글
[Spring]Spring 시작해보기(7) - Service class 생성 (0) | 2022.08.16 |
---|---|
[Spring]Spring 시작해보기(6) - Thymeleaf를 사용해 QuestionList 출력 (0) | 2022.08.16 |
[Spring]Spring 시작해보기(4) - H2 데이터 베이스에서 MariaDB로 변경(JPA) (0) | 2022.08.11 |
[Spring]Spring 시작해보기(3) - JPA (0) | 2022.08.10 |
[Spring]Spring 시작해보기(2) - CRUD (0) | 2022.08.09 |