일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 기능적 요구사항
- 생성자주입
- 스프링di
- 동적파라미터
- fetch join
- ioc컨테이너
- 수정자주입
- 스프링 포매터
- open-session-in-view
- kotlin ::
- 소프트웨어의 품격
- java predicate
- IOC
- kotlin 리팩터링
- 스프링부트 도커
- 스프링
- spring formatter
- 도커 이미지 빌드
- Spring
- method refetence
- 토비의 스프링
- Atomicity
- 스프링 시큐리티 설정
- 자바 필터
- 비기능적 요구사항
- jpa lazy
- 그래프큐엘
- 스프링시큐리티
- jpa no session
- 정적팩토리메서드
Archives
- Today
- Total
공부기록
@EntityGraph 본문
반응형
@EntityGraph
fetch join
fetch가 LAZY로 되어있어도 연관된 객체를 즉시 조회한다.
위와 같이 Member -> Team 관계를 맺고 있을 때 fetch 옵션이 LAZY라면 Member 엔티티를 조회할 때, 연관된 Team 엔티티는 프록시 객체로 조회된다.
이때 셀렉트 쿼리는 Member만을 찾는 셀렉트쿼리 한번이 나가고,
Member.getTeam().getName();
같이 프록시 객체의 실제값을 호출할 때 그제서야 Team에 대한 쿼리도 나간다.만약 Team이 두 개라면 N + 1문제가 터진다. 1은 Member, N(2)은 Team.
다음과 같이 fetch 조인으로 Member와 Team을 조인시켜 한방쿼리로 해결한다.
@Query("select m from Member as m left join fetch m.team") List<Member> findMemberFetchJoin(); @EntityGraph(attributePaths = {"team"}) List<Member> findEntityGraphByUsername(@Param("username") String username);
반응형
'JPA' 카테고리의 다른 글
MySQL5Dialect와 MySQL 스토리지 엔진 (0) | 2020.08.04 |
---|---|
[JPA]open-session-in-view 를 알아보자 (1) | 2020.07.01 |
순수 JPA레포지토리의 페이징과 스프링 데이터 JPA레포지토리의 페이징. (0) | 2020.02.10 |
연관관계의 주인 (0) | 2020.01.27 |
준영속 상태 (0) | 2020.01.16 |