기본 조인

조인의 기본 문법은 첫 번째 파라미터에 조인 대상을 지정하고, 두 번째 파라미터에 별칭(alias)으로 사용할 Q 타입을 지정하면 됩니다.

join(조인 대상, 별칭으로 사용할 Q타입)

JPQL 조인 참고

바로 팀A에 소속된 모든 회원을 찾는 테스트 코드를 작성해보죠.

@BeforeEach
void setUp() {
    queryFactory = new JPAQueryFactory(em);

    Team teamA = new Team("teamA");
    Team teamB = new Team("teamB");
    em.persist(teamA);
    em.persist(teamB);

    Member member1 = new Member("member1", 10, teamA);
    Member member2 = new Member("member2", 20, teamA);
    Member member3 = new Member("member3", 30, teamB);
    Member member4 = new Member("member4", 40, teamB);
    em.persist(member1);
    em.persist(member2);
    em.persist(member3);
    em.persist(member4);
}

@DisplayName("팀A에 소속된 모든 회원")
@Test
void join() {
    List<Member> members = queryFactory.selectFrom(member)
            .join(member.team, team)
            .where(team.name.eq("teamA"))
            .fetch();

    assertThat(members).hasSize(2)
            .extracting("username")
            .containsExactlyInAnyOrder("member1", "member2");
}
  1. join() , innerJoin()
  2. leftJoin()
  3. rightJoin()
  4. JPQL의 on과 성능 최적화를 위한 fetch 조인 제공 → 자세히

실행해서 쿼리를 봅시다.

Untitled

JPQL 문법(JPQL은 객체의 참조를 따라가는 식으로 문법이 되어 있습니다.)으로 조인이 나가는 것을 볼 수 있고 SQL 로 잘 변역된 것도 확인할 수 있습니다.

세타 조인

연관관계가 없는 필드로 조인합니다.