NDM

[JPA] Delete와 DeleteById의 차이점에 대해 알아보자 본문

JPA

[JPA] Delete와 DeleteById의 차이점에 대해 알아보자

ndm.jr 2022. 6. 11. 21:49

목차

  1. Delete
  2. DeleteById
  3. 둘의 차이점

https://ndm-tech.tistory.com/7

 

[JPA] Hibernate 6 : Save() 메소드 Deprecated

아직은 5버전이지만, Hibernate 6버전부터 Save()메소드가 Deprecated된다. https://docs.jboss.org/hibernate/orm/6.0/javadocs/org/hibernate/Session.html#save(java.lang.Object) Session (Hibernate JavaDocs..

ndm-tech.tistory.com

 

Hibernate에서 6.0버전부터 Save()메소드를 Deprecated처리하고, persist() 사용을 권장한다고 발표했다.

 

  1. 이를 통해 영속성 컨텍스트의 내부 동작 원리에 대해 이해해야 한다는 것.
  2. Spring Data Jpa는 단순히 JPA의 기능을 편하게 제공하기 위한 것일 뿐, 그 내부가 어떻게 이루어져 있는지는 스스로 공부해야 한다는 것을 다시한번 느낄 수 있었다.

이러한 이유로 Save() 메소드를 분석해 본 것 처럼, Delete와 DeleteById에 대해서 알아보고자 한다.

 


Delete

 

내부 코드는 이렇게 되어 있다. SImpleJpaRepository에 가면 볼 수 있다.

 

딱히 특별할 것은 없어 보인다.

 

보통 findXX메소드는 entity를 가져오고, getXX메소드는 내부적으로 reference()메소드를 이용해서 프록시 객체를 가져오는데 entity나 프록시나 갖고있는 Id는 같으므로 크게 신경 쓰지 않아도 될 것 같다.

 


DeleteById

내부 코드는 이렇게 되어 있다. 역시 SImpleJpaRepository에 가면 볼 수 있다.

 

몇가지 눈에 띄는점이 있다.

  1. 내부적으로는 delete()를 사용하고 있다.
  2. findById()를 반드시 한 번 호출한다.
    • Delete()에서 em.find()를 호출하기 때문에 그렇게 되면 select가 두 번 나가는 것이 아니냐? 라고 생각할 수 있지만 영속화 된 데이터가 같기 때문에 한 번만 나간다.
  3. Exception객체와 메세지가 정해져 있다.

 


차이점

 

delete()만 단독으로 사용하는 경우보다 findById + Delete로 사용하는 경우

그리고 deleteById로 한번에 쓰는 경우로 나뉜다고 한다. 그럼 여기서 두 가지 의문점이 생긴다.

 

  1. 왜 delete()만 사용하는 경우는 거의 없는가?
    • delete()의 파라미터는 엔티티 그 자체다. 클라이언트로부터 엔티티객체를 직접 전달받을 일은 거의 없다고 생각한다. id정도만 받아서 엔티티를 찾고, 그걸 삭제하는 과정을 거칠수밖에 없다.
  2. findById + delete와 DeleteById, 둘은 무엇이 다른가?

 

성능상의 차이점은 거의 없다고 봐도 무방하다. 참고한 블로그나 코드를 다시한번 봐도

고정된 Exception객체를 사용해야 한다는 것, 커스텀 메세지가 정해져있다는 것 외에는 딱히 차이점을 찾을 수 없었다.

 

개인적으로는 findById()가 Optional로 객체를 받아오기 때문에 직접 서비스 로직에서 호출할 시 에러 메세지를 도메인에 맞게 설정해줄 수 있어 findById + delete를 선호한다.

 


Delete와 DeleteById의 차이점은 Save의 Persist와 Merge의 차이점보다 그 중요성이 떨어지는 것이 사실이다.

 

몰라도 크게 무리가 없고 면접에서도 질문하지 않을 것 같은것도 사실이다.

 

하지만 Hibernate가 Save()를 Deprecated시킨 이유가 JPA의 기본 메소드에 대해 제발 알고 써라 라는 느낌을 받았기 때문에 무심코 지나갈 수 있는 주제에 대해 한번 포스팅 해 보았다. 

 


출처

https://hwanchang.tistory.com/7

 

Spring Data JPA 사용 시 deleteById 와 delete 의 차이

Spring Data 란? Spring Data’s mission is to provide a familiar and consistent, Spring-based programming model for data access while still retaining the special traits of the underlying data store...

hwanchang.tistory.com

 

'JPA' 카테고리의 다른 글

[JPA] Hibernate 6 : Save() 메소드 Deprecated  (0) 2022.06.11
[JPA] Spring Data Jpa의 Save와 Update  (0) 2022.05.24