#10 질문들 정리

김영한 저 "자바 ORM 표준 JPA 프로그래밍"을 읽고 정리한 내용입니다.

1. EXISTS | ALL | ANY | SOME | IN 차이

  • 다중 행 연산자(IN, NOT IN, ANY, ALL, EXISTS)

ERD
DEPT 테이블
EMP 테이블
IN 결과
ANY 결과
ALL 결과
EXISTS 결과

2. n+1 코드 테스트

  • 멤버-주문 양방향 연관관계로 설정

  • FetchType.EAGER로 설정 (디폴트는 LAZY)

  • 676 페이지부터 참고하였습니다.

persistence.xml 코드

Member 엔티티

Order 엔티티

Main 코드

각 코드 설명

  • 지연로딩으로 변경할 경우, JPQL 사용을 해도 문제가 없을까?

  • 주문 컬렉션 FetchType.LAZY로 변경

해결하는 두가지 방법

  • 엔티티그래프(EntityGraph) 사용하기

    • 14장에서 자세히 나온다.

    • FetchType.LAZY FetchType.EAGER로 연관 엔티티를 가져올 것인지를 결정할 수 있다. 하지만 이 구문은 정적이며 런타임 시 이 설정을 변경하지 못하는 단점이 있었습니다. EntityGraph이러한 점을 보완하고 연관 엔티티를 어떻게 로딩할 것인지에 대한 정보를 제공함으로서 엔티티 로딩 속도를 높일 수 있는 장점이 있습니다. 출처arrow-up-right

  • 페치조인(fetch join) 사용하기

3. 즉시(EAGER) 로딩을 사용중인데도 FETCH JOIN을 사용하는 이유

즉시로딩으로 하든 페치조인을 하든 조회시점에 연관된 데이터를 즉시 가지고 오는것 동일하다. 하지만 즉시로딩을 설정하고 연관된 컬렉션을 가져올 경우 N+1 문제가 발생했다. 페치 조인은 조인쿼리 하나만 나갔다.

조인과 페치조이 차이 먼저 궁금해서 다시 정리...

참고자료

JPA 설명 유튜브arrow-up-right

Last updated