Cascade 영속성 전이 사용

영속성 전이를 사용하거나 for문을 돌려서 순수 자바만을 사용했을 때는 아래처럼 일일히 데이터마다 쿼리를 날려서 지우게 했습니다. 지금은 그 수가 적어서 상관이 없지만 나중에 대용량 데이터를 다루게 될 때에 과부하가 걸릴 수도 있다는 판단이 들었습니다. 

 

 

cascade.remove 사용했을 때 query
중첩 for문으로 삭제했을 때 query

 

Where in query 사용

where in 을 사용해서 query를 날리면 댓글을 하나하나 삭제를 하는 것이아니라 한번에 날려줍니다.

public interface CommentRepository extends JpaRepository<Comment, Long>{
	@Modifying //기존에 있는 메서드를 변경하기 때문에
	@Query("delete from Comment c where c.id in :ids")
	void deleteAllByIdIn(@Param("ids") List<Long> ids);
}

위의 코드는 where in을 사용해서 comment와 Likecomment, likepost, post 를 한번씩만 쿼리를 날려서 관련 목록을 다 삭제하였습니다.

 

 

다음에 코드 정리해서 포스팅 해보도록 하겠습니다.

 

참고블로그:

 

 

JPA에서 대량의 데이터를 삭제할때 주의해야할 점

안녕하세요? 이번 시간엔 JPA에서 대량의 데이터를 삭제할때 주의해야할 점을 샘플예제로 소개드리려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (

jojoldu.tistory.com

+ Recent posts