본문 바로가기

Spring Boot/Spring Boot

Spring boot JPA : Delete In

@Transactional
@Modifying
void deleteCartsByCartIdIn(List<Long> cartArr);

위 코드는 Book Store의 장바구니 의 책들을 삭제하는 CartRepository의 JPA코드이다

저장된 두 권의 책을 삭제하고싶어서 delete in을 사용하여 리스트를 제거하였는데

select쿼리 한번과 delete쿼리 두번이 발생하였다.

 

(초록색 괄호부분 //

해당 장바구니의 책 사용자의 장바구니 책이 맞는지 검증하는 코드이다

멤버id를 찾는 쿼리는 두번이나 조회할 필요가 없어서 코드의 맨 위에서 한번만 조회하도록 변경하였다

위 사진은 변경 전에 동작한 사진이라 select문이 여러번 발생했지만 아래 코드에서는 하번만 수행된다)

 

아래 붉은색 괄호부분

아래의 3개의 코드가 delete In을 수행할때 발생하는 쿼리문이다.

delete in 쿼리가 한번만 발생하는 것이 아니라 select를 수행후 각각의 책을 delete해주는 것을 볼 수 있다.

 

    //리스트 삭제
    @Transactional
    @Modifying
    @Query(value = "delete from Cart where cartId IN :cartArr", nativeQuery = true)
    void deleteCartIdsList(@Param("cartArr") List<Long> cartArr);

 

nativeQuery를 사용하여 직접 범위를 넘겨주어 범위조건의 쿼리문을 실행하니 delete cartId In 쿼리 하나만 수행되는 것을 확인할수 있다. (붉은색 괄호부분)