본문 바로가기
디프만 11기

[JPA] getById() vs findById()

by 의정부핵꿀밤 2022. 4. 24.
728x90

안녕 난 JPA린이 야미!

별건 아니고 인텔리제이에서 JPA로 엔티티를 읽어오는데 getById랑 findById가 있더라구

근데 두 개의 차이를 잘 모르겠어서 공부하는 느낌으로 간-단하게 정리하고 가려고!


공통점

  • 둘 다 ID 값으로 엔티티를 가져오는 메소드이다

 

getById

  • 이는 원래 getOne() 이라는 메소드였지만 해당 메소드가 대체된 것이다
  • 내부적으로 EntityManager.getRefernece() 메소드를 호출하기 때문에, 엔티티를 직접 반환하는 것이 아니라 프록시만 반환한다
  • 프록시만 반환하기 때문에 실제로 사용하기 전까지는 DB에 접근하지 않으며, 만약 나중에 프록시에서 DB에 접근하려고 할 때 데이터가 없다면 EntityNotFoundException 이 발생한다

 

findById

  • 실제 DB에 요청해서 엔티티를 가져온다
  • 정확히 말하면, 영속성 컨텍스트의 1차 캐시를 확인하고, 없으면 실제 DB에 데이터가 있는지 확인해서 가져온다

 

 

차이점

  • getById 는 해당 엔티티를 사용하기 전까지 DB에 접근하지 않기 때문에 성능상으로 좀 더 유리하다
  • 따라서 특정 엔티티의 ID 값만 활용할 일이 있다면 DB에 접근하지 않고 프록시만 가져와서 사용이 가능하다!

 

 

 

선택 방법?

  • 엔티티의 실제 상태 값이 필요하지 않고, 식별자가 필요하거나 참조를 통한 연관관계 매핑용 -> getById
  • 엔티티의 실제 상태 값이 필요하고, 데이터베이스에 접근하여 실제 객체를 생성하는 경우 -> findById
728x90

댓글