inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 데이터 JPA

JPQL로 join select를 했을떄 fetch = FetchType.LAZY로 적용했는데도 불과하고

517

리나

작성한 질문수 77

0

JPQL로 join select를 했을떄 fetch = FetchType.LAZY로 적용했는데도 불과하고 

쿼리문을 보면 inner join을 해서 나오는데요

무슨말이면

@Query("select new study.datajpa.dto.MemberDto(m.id, m.username, t.name) from Member m join m.team t")

이 단락을 보면 패치조인이 아니라 일반적인 조인을 했을경우 sql 중심으로 select 하는게 아니라

entity 중심으로 select 하기 때문에

이렇게 Member 연관관계를 맺은 Team이 지연로딩으로 셋팅했기 때문에

n + 1 로 member select 하고

연관관계인 team을 select 해야되지 않나요?

로그 보면 query문이 inner join으로 되어 있어서요...

이게 해당 비지니스 로직인데요

그럼 디버깅 체크 되기 전 save 했을때

이미 1차 캐시에 저장이 되어서(선배님의 JPA 기본편 보니 이렇게 되어 있어서요.. 혹시 제가 잘못 알고있었나요? )

inner join 으로 나가게 되는건가요?

어 그럼... DB에 커넥션 해서 가져오는게 아니라서 query문이 안나와야 하는데..

혼동되네요 ㅠ,ㅠ

이상으로 좋은 강의를 만들어주셔서 감사드리고 잘 부탁드립니다!

감사합니다.

java JPA spring spring-boot

답변 1

0

김영한

안녕하세요 리나님^^ 좋은 질문입니다.

em.find 처럼 JPQL을 작성하지 않고, 엔티티 하나를 직접 찾는 명령어와 JPQL을 통해 조회하는 경우에 차이를 이해하면 궁금해하는 부분이 해결되실꺼에요^^

1. JPQL은 작성된 JPQL을 그대로 SQL로 번역합니다. 엔티티에서 연관관계가 LAZY로 되었든, EAGER로 되어있든간에 JPQL 자체를 SQL로 변경해서 실행할 때는, 이런 옵션들에 영향을 받지 않습니다.

em.find()처럼 엔티티 하나를 직접 찍어서 조회할 때는 JPQL을 개발자가 직접 작성하지 않는데, 이경우는 영향을 줍니다.

2. 추가로 JPQL은 1차 캐시와 무관하게 항상 SQL로 변경되어서 실행됩니다.

반면에 em.find()나, 지연로딩된 엔티티를 찾을 때는 1차 캐시를 먼저 확인합니다.

감사합니다^^

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

67

1

existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?

0

105

3

MemberRepository 구현체

0

56

1

pdf 표현 질문드립니다.

0

60

1

로그가 남지 않는 문제.

0

79

1

테스트 라이브러리가 강의는 junit4가 맞나요??

0

70

2

pdf 파일과 차이점이 있는 것같은데 문제 없나요?

0

71

2

@PrePersist, @PreUpdate 호출 시점 질문드립니다.

0

91

2

Sort 인터페이스는 잘 사용 안하나요?

0

52

1

스캔대상 질문드립니다.

0

45

1

하이버네이트6에서의 최적화에 이은 질문

0

82

1

save() vs saveAndFlush DB 통신 횟수

0

52

1

순수 JPA 리포지토리 코드 수정부분

0

86

2

bulk연산 후 flush하는 이유를 모르겠어요

0

150

3

bulk insert 질문입니다.

0

175

2

교만했던 것 같아요.

0

145

1

RESTful 강의는 안하시는 건지 궁금합니다.

0

145

2

동적 테이블에 대한 질문

0

85

1

영속성 전이와 연관관계

0

130

2

강의 10:25 질문

0

73

1

단건 update 질문

0

95

2

엔티티 와 도메인의 경계

0

126

1

UsernameOnlyDto 타입 type mismatch 오류

0

119

1

Projection 개념과 데이터 전달과정에 대해 질문 있습니다.

0

135

1