JPA에서 deleteById와, delete의 차이점을 알아보려 한다.
deleteById와 delete는 Spring Data의 API 중 CRUDRepository interface에 정리되어 있다.
어떤 차이가 있을까?
(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를 출력한다.
delte코드는 넘어온 entity에 대해 null 체크를 한 뒤, entityManager을 통해 삭제를 진행한다.
두 메서드를 확인해 본 결과, deleteById는 delete를 호출해서 삭제하고있는 것을 확인할 수 있다.
deleteById의 장점
deleteById를 사용하면 서비스 로직에서 메소드를 하나만 사용해도 조회와 삭제를 모두 할 수 있다는 장점이 있다.
또한 내부적으로 id에 대한 null check를 진행하기에 서비스 로직에서 id의 null check를
하지 않더라도 의도치 않은 NullPointerException 발생을 예방할 수 있다.