[RDB] org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation

SEPTEMBER·2025년 5월 6일

문제

org.springframework.dao.DataIntegrityViolationException: JDBC exception executing SQL [delete from orders o1_0] [Referential integrity constraint violation: 생략 ]

테스트 코드를 작성한 뒤에 실행했더니 데이터베이스 관련 오류가 발생했다. 오류 로그를 자세히 뜯어보면, 'delete from orders o1_0' SQL문이 실행되었을 때 외래키 제약 조건 위반 오류(Referential integrity constraint violation)가 발생했다는 걸 알 수 있다.

해결

@AfterEach
void tearDown() {
    orderRepository.deleteAllInBatch();
    productRepository.deleteAllInBatch();
}

오류는 바로 이 @AfterEach 메서드의 첫번째 줄에서 발생했다. OrderProduct 테이블이 Order를 참조하고 있는데, OrderProduct를 삭제하지 않고 Order를 삭제하려 했기 때문에 외래키 제약 조건 위반 오류가 발생했던 것이다.

따라서 아래와 같이 Order를 삭제하는 코드 앞에 OrderProduct를 삭제하는 코드를 추가해 주기만 하면 문제는 쉽게 해결된다.

@AfterEach
void tearDown() {
	// 자식부터 삭제
    orderProductRepository.deleteAllInBatch();
    orderRepository.deleteAllInBatch();
    productRepository.deleteAllInBatch();
}

0개의 댓글