#10 질문들 정리
김영한 저 "자바 ORM 표준 JPA 프로그래밍"을 읽고 정리한 내용입니다.
1. EXISTS | ALL | ANY | SOME | IN 차이
다중 행 연산자(IN, NOT 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는 이러한 점을 보완하고 연관 엔티티를 어떻게 로딩할 것인지에 대한 정보를 제공함으로서 엔티티 로딩 속도를 높일 수 있는 장점이 있습니다. 출처
페치조인(fetch join) 사용하기
3. 즉시(EAGER) 로딩을 사용중인데도 FETCH JOIN을 사용하는 이유
즉시로딩으로 하든 페치조인을 하든 조회시점에 연관된 데이터를 즉시 가지고 오는것 동일하다. 하지만 즉시로딩을 설정하고 연관된 컬렉션을 가져올 경우 N+1 문제가 발생했다. 페치 조인은 조인쿼리 하나만 나갔다.
조인과 페치조이 차이 먼저 궁금해서 다시 정리...
참고자료
Last updated