JPA
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY)의 차이점?
반오십 코린이
2023. 2. 19. 16:55
728x90
팀프로젝트 ERD 캡쳐본이다.
여기서 real_estate와 member 사이의 관계를 주목해보자.
둘 사이의 관계는 N:1 관계이다.
다음은 real_estate의 코드이다.
Real_estate와 member 사이의 관계는 N:1이기 때문에 Real_estate 입장에선 @ManytoOne 관계가 맞다.
그리고 추가적으로 입력하는 fetch = FetchType.LAZY 라는 정보는 어떤 의미일까?
LAZY 속성을 사용하게 되면 EntityManager에 있는 member 값을 조회하려 할 때 오직 member만 조회된다.
그렇다면 EAGER 속성을 사용하면 어떻게 될까?
EntityManager에 있는 member을 조회하려 할 때 member와 연관 관계가 있는 테이블이 모두 조회가 된다.
즉, 위의 경우에선 real_estate까지 join 되어 불러오게 된다는 것이다.
그렇다면 LAZY를 사용하는 것이 맞나요?
어떤 의도로 구현하려 하느냐에 따라 다르겠지만 테이블 하나를 조회할 때 매핑 되어있는 테이블들을 함께 조회하고 싶다
→ EAGER 사용
아니다. 나는 하나의 테이블만을 조회하고 싶다.
→ LAZY 사용
보통 LAZY를 사용하라고 권고하는 이유는 불러오고 하는 과정에서 데이터 낭비가 존재하기에
728x90