728x90
안녕 난 JPA린이 야미!
별건 아니고 인텔리제이에서 JPA로 엔티티를 읽어오는데 getById랑 findById가 있더라구
근데 두 개의 차이를 잘 모르겠어서 공부하는 느낌으로 간-단하게 정리하고 가려고!
공통점
- 둘 다 ID 값으로 엔티티를 가져오는 메소드이다
getById
- 이는 원래 getOne() 이라는 메소드였지만 해당 메소드가 대체된 것이다
- 내부적으로 EntityManager.getRefernece() 메소드를 호출하기 때문에, 엔티티를 직접 반환하는 것이 아니라 프록시만 반환한다
- 프록시만 반환하기 때문에 실제로 사용하기 전까지는 DB에 접근하지 않으며, 만약 나중에 프록시에서 DB에 접근하려고 할 때 데이터가 없다면 EntityNotFoundException 이 발생한다
findById
- 실제 DB에 요청해서 엔티티를 가져온다
- 정확히 말하면, 영속성 컨텍스트의 1차 캐시를 확인하고, 없으면 실제 DB에 데이터가 있는지 확인해서 가져온다
차이점
- getById 는 해당 엔티티를 사용하기 전까지 DB에 접근하지 않기 때문에 성능상으로 좀 더 유리하다
- 따라서 특정 엔티티의 ID 값만 활용할 일이 있다면 DB에 접근하지 않고 프록시만 가져와서 사용이 가능하다!
선택 방법?
- 엔티티의 실제 상태 값이 필요하지 않고, 식별자가 필요하거나 참조를 통한 연관관계 매핑용 -> getById
- 엔티티의 실제 상태 값이 필요하고, 데이터베이스에 접근하여 실제 객체를 생성하는 경우 -> findById
728x90
'디프만 11기' 카테고리의 다른 글
🔥 의정부 핵꿀밤 스터디 목록 IN antoon wiki 🔥 (0) | 2022.06.04 |
---|---|
디프만 1번출구 중간 발표 준비✨ (0) | 2022.05.14 |
[Redis] redis docker 삽질 기록🛠 (0) | 2022.05.10 |
백엔드 - 프론트엔드 OAuth2.0 고민 해결! (0) | 2022.04.10 |
Elevator Pitch (0) | 2022.03.25 |
댓글