[JPA] deleteById vs delete

손효재·2022년 7월 24일
0

JPA

목록 보기
5/11
post-thumbnail

Spring Data JPA의 delete 와 deleteById 의 차이는 무엇인지,
성능상으로도 차이가 있는지 궁금해서 정리한 내용입니다.

deleteById, delete

deleteById 와 delete는 Spring Data CrudRepository interface의 구현체인
SimpleJpaRepository에 정의되어있다.

deleteById

delteById의 코드를 확인해보면 내부적으로 delete를 호출하고 있으며,
넘어온 id 값으로 findById를 사용하여 delete에 인자로 넘겨줄 엔티티를 조회하고 있다.

이때, findById로 조회한 데이터가 없을 경우, EmptyResultDataAccessException을 발생시킨다.

delete

delete는 넘어온 엔티티에 대해 null체크를 한 이후, EntityManager를 통해 삭제하고있다.

deleteById vs delete

deleteById를 사용하면, 서비스 로직에서 메서드 하나만 사용해도 조회와 삭제가 모두 가능하다. 또한, 내부적으로 id에 대한 null체크도 해주기 때문에 의도치않은 NullPointerException도 예방할 수 있다.

하지만, deleteById는 내부적인 findById 조회시에 데이터가 없을 경우, EmptyResultDataAccessException이 고정으로 발생한다.

반면에, findById + delete를 사용한다면, 직접 예외처리를 커스텀할 수 있다는 장점이 있다.

결론적으로는 id 조회시 null에 대한 Exception 차이를 제외한 전체 로직은 동일하여 성능상 차이가 없을것으로 보인다.

1개의 댓글

comment-user-thumbnail
2023년 12월 30일

좋은 정보 잘 보고 갑니다.
감사합니다.

답글 달기