일반 조인과 fetch join 차이에 대해 질문이 있습니다.
374
작성한 질문수 3
섹션 11. 객체지향 쿼리 언어2- 중급 문법 내의 "페치 조인1 - 기본" 강의를 듣고 작성하는 질문입니다.
안녕하세요 :)
https://www.inflearn.com/questions/164472
https://www.inflearn.com/questions/170331
Q1)
제가 헷갈리는 부분과 관련해서 질문들이 있길래 다 살펴봤지만, 제가 명확하게 이해한 것인지 확신을 할 수 없어서 이렇게 질문 남깁니다.
일반 조인 -> 두 객체를 돌려받음, 객체 그래프 채워짐
(객체 그래프가 채워질 꺼라 생각한 이유는, https://www.inflearn.com/questions/170331 의 강사님 답변 "Object[]은 각각 따로 조회하기 때문에 이런 부분을 처리할 때 작업 공수가 많이 들어갑니다." 이 내포하는 뜻이 두 조인의 내부적인 동작에서는 차이가 있지만 결과는 똑같다고 생각해서입니다.)
페치 조인 -> 한 객체를 돌려받음, 객체 그래프 채워짐
제가 이해한 내용이 맞을까요?
Q2)
일반 조인시에도 객체 그래프가 채워지는 지 확인하기 위해서, 코드를 직접 짜서 테스트를 돌려봤는데 이해하기 힘든 쿼리가 나가서 추가적으로 질문 남깁니다.
(위의 질문에 대한 답변과 유사성이 있을까싶어, 한 질문란에 두개의 질문을 남깁니다. 아니라면 죄송합니다 ㅠㅠ)
해당 테스트 관련 코드와 결과화면을 첨부해두겠습니다.
일반 조인을 통해 작성한 쿼리를 em.createQuery()... 를 통해 결과리스트를 반환받고 하나씩 반복문을 통해 돌려보는데, select query가 추가로 나가는 것을 발견했습니다.
member 에서 team 을 조회할 때는 쿼리가 추가로 발생하지 않는데, team에서 member를 조회할 때에 쿼리가 추가로 발생합니다.
처음 작성한 query를 통해 member를 다 받아왔을텐데, 왜 team에서 member를 조회할 때 쿼리가 추가로 발생할까요..?
고민해봐도 모르겠어서 질문 남깁니다.
감사합니다.



답변 1
0
안녕하세요. 이원태님
일반 조인 -> 두 객체를 돌려받음, 객체 그래프가 채워지지 않은 상태로 조회됩니다.
페치 조인 -> 한 객체를 돌려받음, 객체 그래프 채워짐
감사합니다.
0
답변 감사합니다 :)
다만, 이해가 안되는 부분이 한 군데 있어 댓글로 다시 질문드립니다.
일반조인 시에, 객체 그래프가 채워지지 않은 상태로 조회된다면
처음 질문때의 첨부해드린 코드의 예시에서,
member(findMember) 에서 team 을 조회할 때 select 쿼리가 나가야 할 것 같은데 왜 나가지 않았을까요..
제가 아무래도 객체 그래프가 채워지지 않았다는 의미를 오해하고 있는 것 같은데, 의미를 알려주실수 있으실까요?
감사합니다
0
JPA에서 모든 엔티티 조회는 영속성 컨텍스트에 캐시 됩니다. (1차캐시)
처음 쿼리가 select member, team 으로 둘다 조회했기 때문에 member, team이 1차 캐시에 저장됩니다.
패치 조인을 하지 않았기 때문에 조회한 member -> team은 프록시로 조회됩니다.(지연로딩)
그런데 1차 캐시에 이미 member가 있기 때문에 이 경우는 프록시가 아닌 1차 캐시에 보관된 team이 적용됩니다.
감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
54
2
inheritance startegy 선택시 고려사항
0
35
1
Entity 동등성 비교
0
38
1
실무 조언 관련 질문입니다.
0
64
1
H2데이터베이스 파일 생성
0
76
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
66
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
62
1
JPQL 메소드와 락
0
62
1
Delivery @OneToOne
0
70
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
104
2
UnsupportedOperationException 발생
0
97
3
H2 Database 연결이 안됩니다.
0
101
2
연관관계 매핑 질문드립니다.
0
93
2
h2데이터베이스 실행오류
0
114
2
persistence.xml
0
119
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
87
1
영속성 컨텍스트
0
74
1
JPA 프록시
0
105
1
Native Query와 MyBatis
0
81
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
97
1
임베디드 타입 예시 코드 관련 질문
0
125
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
100
3
인텔리제이 패키지 커서 단축키 질문
0
112
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
151
1





