본문 바로가기

Spring

[Spring]Spring 시작해보기(5) - MariaDB의 Truncate Table 실행하기

테이블을 사용할 때 내용을 초기화 할 때가 있다.

 

그럴때는 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();
}

결과는 성공적으로 나왔다!