728x90
기본 조인

- 기본 조인
- 조인의 기본 문법은 첫 번째 파라미터에 조인 대상을 지정하고, 두 번째 파라미터에 별칭(alias)으로 사용할 Q 타입을 지정하면 된다.
- join(조인 대상, 별칭으로 사용할 Q타입)
- join() , innerJoin() : 내부 조인(inner join)
- leftJoin() : left 외부 조인(left outer join)
- rightJoin() : rigth 외부 조인(rigth outer join)
- JPQL의 on 과 성능 최적화를 위한 fetch 조인 제공 다음 on 절에서 설명
세타 조인
연관관계가 없는 필드로 조인

- from 절에 여러 엔티티를 선택해서 세타 조인
- 외부 조인 불가능 다음에 설명할 조인 on을 사용하면 외부 조인 가능
조인 - on절
ON 절을 활용한 조인(JPA 2.1부터 지원)
- 1. 조인 대상 필터링
- 2. 연관관계 없는 엔티티 외부 조인
조인 대상 필터링

on 절을 활용해 조인 대상을 필터링할 때, 외부 조인이 아니라 내부 조인(inner join)을 사용하면, where 절에서 필터링하는 것과 기능이 동일하다. 따라서 on 절을 활용한 조인 대상 필터링을 사용할 때, 내부 조인 이면 익숙한 where 절로 해결하고, 정말 외부 조인이 필요한 경우에만 이 기능을 사용하자
연관관계없는 엔티티 외부 조인

- 세타 외부 조인
- 하이버네이트 5.1부터 on을 사용해서 서로 관계가 없는 필드로 외부 조인하는 기능이 추가되었다. 물론 내부 조인도 가능하다.
- 주의! 문법을 잘 봐야 한다. leftJoin() 부분에 일반 조인과 다르게 엔티티 하나만 들어간다.
- 일반 조인: leftJoin(member.team, team)
- on조인: from(member).leftJoin(team).on(xxx)
페치 조인
조인은 SQL에서 제공하는 기능은 아니다. SQL조인을 활용해서 연관된 엔티티를 SQL 한 번에 조회하는 기능이다. 주로 성능 최적화에 사용하는 방법이다
@PersistenceUnit
EntityManagerFactory emf;
@Test
public void fetchJoinNo() throws Exception {
em.flush();
em.clear();
Member findMember = queryFactory
.selectFrom(member)
.where(member.username.eq("member1"))
.fetchOne();
boolean loaded = emf.getPersistenceUnitUtil().isLoaded(findMember.getTeam());
assertThat(loaded).as("페치 조인 미적용").isFalse();
}

- 사용방법 join(), leftJoin() 등 조인 기능 뒤에 fetchJoin()이라고 추가하면 된다.
728x90
'실전! Querydsl' 카테고리의 다른 글
| Ch02. 기본 문법 - Case문, 상수, 문자 더하기 (0) | 2021.12.30 |
|---|---|
| Ch02. 기본 문법 - 서브 쿼리 (0) | 2021.12.30 |
| Ch02. 기본 문법 - 정렬, 페이징, 집합 (0) | 2021.12.30 |
| Ch02. 기본 문법 - 검색 조건 쿼리, 결과 조회 (0) | 2021.12.30 |
| Ch02. 기본 문법 - JPQL vs Querydsl, 기본 Q-Type 활용 (0) | 2021.12.30 |