Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

거인의 코딩일지

[JPA] deleteAll(), deleteAllInBatch(), deleteInBatch() 개념과 차이점 본문

코딩/JAVA

[JPA] deleteAll(), deleteAllInBatch(), deleteInBatch() 개념과 차이점

코딩거인 2023. 10. 10. 16:52
728x90

deleteAll() 이란??

  • CrudRepository에 정의된 메서드이며, SimpleJpaRepository에 재정의 되어 있다.
  • 요청 데이터로 전달한 모든 엔티티를 삭제할 수 있다.
  • 내부적으로 엔티티들을 하나씩 꺼내어 delete() 를 사용하고 있음
  • id 갯수 만큼 모두 for 문을 돌며 delete 쿼리문을 수행함

 

deleteAllInBatch() 란??

  • SimpleJpaRepository에 재정의되어 있는 deleteAllInBatch()는 applyAndBind()를 사용하여 쿼리를 끝낸다.
  • 이것을 사용하게 되면 인자로 List<>를 entities로 넘겨주기 때문에 if 조건문을 넘어가고 applyAndBind가 실행된다.
  •  EntityManager의 createQuery()로 쿼리를 준비하여 직접 excuteUpdate()를 호출하여 한번의 쿼리로 여러개의 삭제를 진행하는 것이다.

deleteAll()과 deleteAllInBatch() 의 차이점?

  1. deleteAll() 은 한건씩 삭제되는 것에 비해 deleteAllInBatch() 는 where 조건에서 or 를 붙여서 한번에 삭제하게 된다.
  2. 삭제하는 것들이 많을 수록 성능 차이가 발생한다.
  3. deleteAll()과 deleteAllInBatch()는 인자로 아무것도 넘겨주지 않으면 그 테이블 데이터를 전체 삭제하겠다는 의미

deleteInBatch() 란?

  • deleteAllInBatch() 에서 조건을 두어 삭제할 수 있는 구문이다.
  • argument를 주어도 for문을 전부돌며 select해오지 않음. 
  • entity에 값이 있던지 없던지 바로 delete쿼리를 날린다. 

 

결론!!!

  • deleteAll, deleteInBatch, deleteAllInBatch의 차이는 실제로 for문을 전부 돌며 select를 해오느냐, iterable로 하나하나 확인하며 지우느냐, 아니면  쿼리한번으로 모두 지우느냐 차이이다.

 

 

 

728x90