조인의 기본 문법은 첫 번째 파라미터에 조인 대상을 지정하고, 두 번째 파라미터에 별칭(alias)으로 사용할 Q 타입을 지정하면 됩니다.
join(조인 대상, 별칭으로 사용할 Q타입)
바로 팀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");
}
실행해서 쿼리를 봅시다.
JPQL 문법(JPQL은 객체의 참조를 따라가는 식으로 문법이 되어 있습니다.)으로 조인이 나가는 것을 볼 수 있고 SQL 로 잘 변역된 것도 확인할 수 있습니다.
연관관계가 없는 필드로 조인합니다.