객체지향 쿼리 언어1 - 기본 문법 > 조인 파트에서 질문이 있습니다.
230
작성한 질문수 77
05:16에서 보시면
String query = "select m from Member m inner join m.team t";
이 쿼리를 날리는데요.
Member 엔티티 클래스에서
###################
@ManyToOne()
@joincolum()
private Team team;
##################
"즉시 로딩"이라 할지라도
이미
"조인한 쿼리"(member 하고 team INNER JOIN)가 나오는데 불과하고
왜 해당되는 Team에 다시 select 쿼리를 나오는건가요?
다시말씀드리자면
이미 조인해서 Member 하고 Team에 연관관계된 모든 데이터가
1차캐시에 저장되어서
Team 관련된 select 쿼리는 안오는게 아닌가요?
왜 select 쿼리가 나오는지 궁금합니다.. (제가 이전강의에 분명 놓친 부분이 있어서 질문을 드리지만 이전 영상 찾아봐도 못찾아서 ㅠ,ㅠ 어쩔수없이 ㅠ,ㅠ)
감사합니다.
답변 1
2
안녕하세요. 리나님 좋은 질문입니다^^
실무에가면 이 부분을 이해하는게, 성능에서 정말 정말 중요해집니다!
JPA는 em.find() 같은 단건 조회는 즉시 로딩으로 되어 있으면 최적화를 해서 JOIN도 하고, select 절에 team도 추가해서 SQL 한번에 조회 하지만, JPQL을 실행하는 경우는 다릅니다. JPQL은 SQL로 그대로 번역됩니다.
String query = "select m from Member m inner join m.team t";
이 JPQL을 실행한 결과를 잘 보시면, 조인한 쿼리라 할지라도 SQL의 select 절을 보시면, member 와 관련된 데이터만 DB에서 조회합니다!(SQL에서 TEAM에 대한 데이터를 조회하지 않습니다.) 그래서 최초 JPQL 실행후에 team에 대한 데이터는 없는 것이지요. 이런 문제를 해결하려면 fetch join을 학습해야 합니다.
조금 뒤에 섹션 11. 객체지향 쿼리 언어2 - 중급 문법에서 fetch join을 설명하는데요. 이 부분을 유심히 들어보시면 원하는 답을 얻을 수 있을거에요^^
감사합니다^^
실무 조언 관련 질문입니다.
0
41
1
H2데이터베이스 파일 생성
0
51
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
49
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
48
1
JPQL 메소드와 락
0
52
1
Delivery @OneToOne
0
57
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
89
2
UnsupportedOperationException 발생
0
82
3
H2 Database 연결이 안됩니다.
0
87
2
연관관계 매핑 질문드립니다.
0
82
2
h2데이터베이스 실행오류
0
105
2
persistence.xml
0
103
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
77
1
영속성 컨텍스트
0
62
1
JPA 프록시
0
89
1
Native Query와 MyBatis
0
63
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
82
1
임베디드 타입 예시 코드 관련 질문
0
112
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
90
3
인텔리제이 패키지 커서 단축키 질문
0
106
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
136
1
양방향 연관관계 시 연관관계 주인을 설정하는 이유
0
68
1
임베디드 타입과 MappedSuperClass의 차이점이 궁금합니다.
0
95
1
데이터베이스가 초기화되는 것 같아요
1
177
2





