-
JPA getById() 와 findById()의 차이Spring 2022. 1. 12. 22:33
jpa에서 ID를 이용하여 객체를 가져오는 방법에는 getById(), findById() 두가지 방법이 존재한다.
getById()
public void get_activity_with_id(Integer id) { //given //when Activity activity = repo.getById(id); //then }
getById()는 원래 메소드인 getOne()이 deprecated되어 대체된 메소드로 내부적으로 EntityManager.getReference() 메소드를 호출하여 엔티티가 아닌 프록시를 반환한다. 이 때문에 실제로 사용하기 전에는 데이터 베이스에 접근하지 않고 실제로 사용될 때 프록시에서 데이터 베이스에 접근하려고 할때 데이터가 존재하지 않는다면 EntityNotFoundException을 발생시킨다.
findById()
public void get_activity_with_id(Integer id) { //given //when Activity activity = repo.findById(id); //then }
findById()는 바로 영속성 컨텍스트에서 1차 캐시에서 데이터 조회 후 존재하지 않으면 데이터베이스를 조회하여 실제 엔티티 객체를 반환한다.
차이점
getById()는 findById()와 달리 엔티티 사용 전에 데이터 베이스에 접근하지 않고 프록시 객체를 반환하기 때문에 성능상으로 유리할 수 있다. ( 특정 엔티티의 Id만을 사용하고 나머지 정보를 활용하지 않는다면 전체 객체를 가져오지 않고 getById()로 프록시만을 가지고 사용함으로서 성능을 높일 수 있다. )
(참고한 사이트)
https://bcp0109.tistory.com/325
'Spring' 카테고리의 다른 글
예외처리전략 ( ExceptionHandler ) 2 (0) 2022.01.13 JPA 엔티티에 생성 시점, 수정 시점 Timestamp 추가하기 ( + Auditing) (0) 2022.01.13 테스트 코드 작성할 때 Junit5 사용시 JUnit Vintage 오류 발생 (0) 2022.01.11 Lombok 사용시 주의할 점 (0) 2021.12.29 RESTful API (2) 2021.12.19