JPA사용 시 deleteById와 delete의 차이점

두주·2023년 12월 28일
0

TIL

목록 보기
25/58

JPA에서 deleteById와, delete의 차이점을 알아보려 한다.

deleteById와 delete는 Spring Data의 API 중 CRUDRepository interface에 정리되어 있다.

SimpleJpaRepository.class

어떤 차이가 있을까?

(1) delete를 사용했을 경우
public void delete(user) {
userRepository.delete(user)
}

(2) deleteById를 사용했을 경우
public void deleteById(userId: Long) {
userRepository.deleteById(userId)
}

데이터를 삭제할 때 두 가지 방식 모두 동일한 결과를 낸다.

deleteById를 살펴보면 내부적으로 delete를 호출하고 있다.
Id값을 받아, findById를 사용하여 delete에 인자로 넘겨줄 데이터를 조회한다.
넘어온 id값이 null인 경우 message를 출력한다.

  • Assert는 인수를 검증하고 조건에 맞지 않는 경우 IllegalArgumentException 또는
    IllegalStateException을 발생시킨다.

delte코드는 넘어온 entity에 대해 null 체크를 한 뒤, entityManager을 통해 삭제를 진행한다.

두 메서드를 확인해 본 결과, deleteById는 delete를 호출해서 삭제하고있는 것을 확인할 수 있다.

그렇다면 왜 나뉘어져 있을까?

deleteById의 장점

deleteById를 사용하면 서비스 로직에서 메소드를 하나만 사용해도 조회와 삭제를 모두 할 수 있다는 장점이 있다.

또한 내부적으로 id에 대한 null check를 진행하기에 서비스 로직에서 id의 null check를
하지 않더라도 의도치 않은 NullPointerException 발생을 예방할 수 있다.

참고자료
https://hwanchang.tistory.com/7

profile
야옹.

0개의 댓글