자바생
Published 2022. 9. 25. 10:28
Find vs Get Spring Data
728x90

글을 쓰게 된 이유

Spring Data JPA를 사용하면서 findById, getById 가 있는 것을 보고 둘은 어떤 차이가 있는지 궁금해서 찾아보았습니다.

 

JpaRepository, CrudRepository

전의 글에서 JpaRepository와 CrudRepository를 비교해보았는데 findById, getById도 연관이 있을 줄은 몰랐습니다,, 

아무튼 Spring Data 를 사용하면서 id를 통해 엔티티를 조회하는 메서드가 JpaRepository, CrudRepository에 존재합니다.

하지만 각 메서드의 이름은 다르고, 반환형도 다릅니다.

왜 굳이 메서드 이름과, 반환형을 다르게 했을까요?(아무 이유 없이 그냥 만든 것은 아니라고 생각,,)

 

//CrudRepository
Optional<T> findById(ID id);

//JpaRepository
//@return a reference to the entity with the given identifier.
T getById(ID id);

Optional에 대해 간단히 말하자면 결과가 없음을 명확하게 나타내는 방법이 필요한 라이브러리 메서드의 반환 값 유형에 제한된 메커니즘을 제공하기 위해 추가되었다고 합니다.

 

CrudRepository의 find

  • 결과가 안 나올 수 있음
  • can return NULL
  • 예) 서점에서 사용자가 책을 검색할 경우 책이 있을 수 있고, 없을 수 있음

 

JpaRepository의 get

  • 엔티티가 존재하지 않으면 예외를 발생시킴
  • 일치 항목이 "존재"한다고 가정
  • 항상 무언가가 반환되야함
  • never return NULL
  • 예) 사용자가 구매한 책을 배송하려고 주문한 책을 조회하는데 이때는 책이 "무조건" 존재해야함

 

REFERENCES

find vs get

Optional(stackoverflow)

728x90
profile

자바생

@자바생

틀린 부분이 있다면 댓글 부탁드립니다~😀

검색 태그