NoTimeForDawdling

[JPA] delete와 deleteById 차이 본문

JPA

[JPA] delete와 deleteById 차이

Room_Energy 2021. 7. 31. 15:22

Spring Data Jpa를 사용해서 토이 프로젝트를 구성하던 중에 deletedeleteById 중 뭘 사용하면 좋을지 고민해 보다가 둘의 차이점을 알아보기로 했다.

 

우선 deletedeleteByIdCrudRepository 인터페이스 안에 다음과 같이 정의되어 있다.

CrudRepository 인터페이스의 실제 구현체는 SimpleJpaRepository이다.

 

SimpleJpaRepository에 구현되어있는 delete는 다음과 같다.

delete는 입력받은 entity에 대해 null체크를 한 후 entity에 대한 삭제를 진행하고 있다.

 

자 이제 deleteById를 봐보자.

구현부를 보면 delete() 메서드를 호출하고 있는 모습을 볼 수 있다.

 

findById()로 해당 entity를 찾고 delete()를 호출한다.

findById()로 해당 entity를 찾지 못한다면 EmptyResultDataAccessException을 발생시킨다.

 

여기서 중요한 점은 deleteById는 결국 delete를 호출하여 삭제를 진행한다는 점이다.

즉, deletedeleteById의 성능 차이는 크게 없어 보인다.

 

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

 

일단 deleteById는 해당 메서드 만으로 entity조회 및 삭제가 다 된다는 장점이 있다.

 

delete는 보통 findById와 같이 사용한다. findById와 같이 사용하면 예외처리를 커스텀하여 원하는 메시지를 보낼 수 있다는 장점이 있다.

public void delete(Long roomId) {
   roomRepository.delete(
           roomRepository.findById(roomId)
                  .orElseThrow(() -> new RoomNotFoundException(String.format("Not found room. room id: %d", roomId))));
}

위 코드를 보면 RoomNotFoundException을 사용하고, 원하는 메시지를 작성하여 클라이언트에게 보낸다.

 

deleteByIddelete 둘의 성능 차이는 크게 안 나기 때문에 상황에 맞춰 원하는 걸 사용하면 될 것 같다.

 

'JPA' 카테고리의 다른 글

[JPA] 쿼리 메서드(Query Method)  (0) 2021.08.27
[JPA] Auditing 기능  (0) 2021.07.31
[JPA] delete가 안되는 현상  (0) 2021.05.21