Spring Boot/JPA

Spring Boot - delete 관련 문제점

최-코드 2024. 7. 11. 11:07

보통 엔티티의 모든 값을 제거할 때 deleteAll()을 사용하는데 이 함수는 각 레코드마다 delete 문을 한 건씩 만들어서 실행해준다. 왜냐하면 내부적으로 select 이후 delete를 하기 때문에 한 건씩 이뤄지게 된다. 자세한 내용은 delete 함수 로직을 보면 된다.

일대다 관계에 있을 때도 cascade나 orphanremoval 설정 시 마찬가지로 일을 삭제할 때 일과 매핑된 다 또한 delete 문이 하나씩 나간다.

따라서 deleteAllInBatch()를 사용해야한다. deleteAllInBatch() 함수는 내부적으로 applyAndBind()함수를 통해 "delete from Entity x where x = ?1 or x = ?2 or ..."와 같이 쿼리문을 만들고 실행한다. 따라서 deleteAll()과 달리 하나의 쿼리문을 통해 테이블 삭제를 진행한다.

인자를 아무것도 안 주었을 시에는 테이블 전체를 삭제하고, 인자로 Iterable 타입을 가진 변수를 주면 해당 변수에 대해서만 삭제를 진행한다.

deleteAllInBatch()는 soft delete가 불가능하므로 따로 배치 함수를 생성해야 한다.