• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

페치조인 질문 있습니다

23.09.02 23:47 작성 조회수 313

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

 

페치 조인으로 데이터를 가져왔을때
예를들어

EntityA 와 EntityB 가 1:1관계이고 EntityB와 EntityC가 1:N관계일때

select a from EntityA a join fetch EntityB 이런식으로 가져왔습니다.
근데 EntityB안에 EntityC가 @oneToMany로 있을 때

현재 저대로 쿼리를 날리면 EntityB를 통해서 EntityC에 접근할때마다 쿼리가 날라갑니다

EntityA를 조회하는 시점 ( select a from EntityA a join fetch EntityB )에 EntityC까지 한번에 페치조인으로 가져올 순 없는 걸까요?

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2023.09.04

안녕하세요. vnfthr님, 공식 서포터즈 y2gcoder입니다.

select distinct a from EntityA a 
join fetch a.entityB b 
join fetch b.entityCList c;

페이징이 필요 없는 쿼리라면 이렇게 fetch join을 해줬을 때 문제가 생길까요?

페이징이 필요한 쿼리라면 batch size 등을 이용해서 추가 쿼리가 발생하되, 추가 쿼리의 개수를 줄일 수는 있을 것 같습니다 :)

 

감사합니다.

vnfthr님의 프로필

vnfthr

질문자

2023.09.05

페치조인에 alias를 사용해도 상관없나요 ..? 일단 저대로 해봤는데도 조회가 안되네요..

y2gcoder님의 프로필

y2gcoder

2023.09.06

해당 링크(클릭)를 보시면 아시겠지만 일관성을 해치지 않는다면 Hibernate도 허용한만큼 별칭을 사용해도 된다고 생각하여 별칭을 넣었습니다 :)

그럼에도 불구하고 c라는 별칭은 여기서 불필요해보입니다. 정확하지 못한 답변을 드려 죄송합니다.

batch size를 사용해서 쿼리 수를 줄이거나 네이티브 쿼리를 이용해야 할 것 같습니다!