728x90
조인 -기본 조인
-> Querydsl에서는 JOIN 함수도 역시 제공한다.
join(), innerJoin(): 내부조인(inner join)
leftJoin(): left외부조인(left outer join)
rightJoin():right외부조인(right outer join)
JPQL의 on과 성능 최적화를 위한 fetch 조인제공
그렇다면 연관관계가 없는 엔티티간의 조인은 어떻게 하는가? → 세타 조인
/**
* 세타 조인
* 회원의 이름이 팀 이름과 같은 회원 조회
*
* @throws Exception
*/
@Test
public void theta_join() throws Exception {
//given
em.persist(new Member("teamA"));
em.persist(new Member("teamB"));
em.persist(new Member("teamC"));
List<Member> result = queryFactory
.select(member)
.from(member, team)
.where(member.username.eq(team.name))
.fetch();
assertThat(result)
.extracting("username")
.containsExactly("teamA", "teamB");
}
from 절에서는 여러 엔티티를 선택해서 세터조인이 가능하다.
전혀 연관관계 없는 필드로도 조인이 가능하다.
외부조인이 불가능한데 on절을 사용해서 외부조인이 가능하다.
패치조인 적용하는방법
@Test
public void fetchJoin() throws Exception{
em.flush();
em.clear();
Member findMember = queryFactory
.selectFrom(member)
.join(member.team,team).fetchJoin()
.where(member.username.eq("member1"))
.fetchOne();
boolean loaded = emf.getPersistenceUnitUtil().isLoaded(findMember.getTeam());
Assertions.assertThat(loaded).as("패치 조인 적용").isTrue();
}
728x90
'QueryDsl' 카테고리의 다른 글
JPQL 과 QueryDsl (0) | 2023.03.20 |
---|---|
querydsl 벌크연산 수행 주위사항 (0) | 2023.01.23 |
Query dsl 설정 및 테스트 (0) | 2023.01.13 |