상황 : 연관 관계에 의해 조회할 필요없는 데이터 조회
해결 : findById 대신 getReferenceById를 통해 데이터 조회
이유
- findById를 사용하면 이 함수가 쓰인 즉시 쿼리를 발생시켜 db에서 데이터를 조회하지만 getReferenceById는 entity를 실제로 사용할 때까지 데이터 조회를 지연한다.
- 즉, entity가 필요한 시점에 쿼리를 발생시킨다.
- 지연 로딩을 사용한 것이므로 실제 사용 전까지는 proxy 형태로 객체를 가리키고 있다.
- id값을 가지고 올 때까지는 지연 로딩이고, 그 외에 데이터를 가져올 때는 쿼리를 발생시킨다.
- 연관 관계 매핑할 때도 getReferenceById를 통해 가져온 proxy 객체를 넣어줘도 문제 없다. 대신 save할 때 만약 없는 데이터면 에러가 발생한다.
- 1차 캐시에 존재한 엔티티에 대해서 getReferenceById() 메소드를 호출하면 프록시가 아닌, 1차 캐시에 있는 엔티티를 반환한다.
'Spring Boot > JPA' 카테고리의 다른 글
| JPA @Query(+@Modifying) - JPQL (0) | 2025.08.21 |
|---|---|
| Spring Boot JPA LZAY - LazyInitializationException 주의 (0) | 2025.08.21 |
| 상속관계 매핑(+@MappedSuperclass) (0) | 2025.08.20 |
| @OneToOne Lazy loading 한계 (0) | 2025.08.20 |
| Spring Boot 양방향 & 단방향 (feat. 연관 관계를 걸지 말자) (0) | 2025.07.20 |