인프런 커뮤니티 질문&답변

우와아앙님의 프로필 이미지
우와아앙

작성한 질문수

실전! Querydsl

조인 - on절

join_on_filtering 테스트 질문이요!!

작성

·

209

0


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

[질문 내용]
 
안녕하세요! 강의 잘 듣고 있습니다.

join_on_filtering()테스트에서 다음과 같이 assertthat으로 검증을 했는데 null이 반환되더군요 ㅠ..
 
@Test
public void join_on_filtering(){
List<Tuple> result = queryFactory
.select(member, team)
.from(member)
.leftJoin(member.team, team)
.on(team.name.eq("teamA"))
.orderBy(member.username.asc())
.fetch();

for (Tuple tuple : result) {
System.out.println("tuple = " + tuple);
}

Tuple member1 = result.get(0);
Tuple member2 = result.get(1);

assertThat(member1.get(team.name)).isEqualTo("teamA");
 
그래서 아래와 같이 수정하여 테스트 해봤는데 잘 동작됩니다.
 
@Test
public void join_on_filtering(){
List<Tuple> result = queryFactory
.select(member, team)
.from(member)
.leftJoin(member.team, team)
.on(team.name.eq("teamA"))
.orderBy(member.username.asc())
.fetch();

for (Tuple tuple : result) {
System.out.println("tuple = " + tuple);
}

Tuple member1 = result.get(0);
Tuple member2 = result.get(1);

assertThat(member1.get(team).getName()).isEqualTo("teamA");
assertThat(member2.get(member).getUsername()).isEqualTo("member2");
 
 
 
 
이전에 했던 gruop() 테스트 코드에서는 다음과 같이 assertthat 에서 team.name으로 검증을 했었습니다.
@Test
public void group(){
List<Tuple> result = queryFactory
.select(team.name, member.age.avg())
.from(member)
.join(member.team, team)
.groupBy(team.name)
.fetch();

Tuple teamA = result.get(0);
Tuple teamB = result.get(1);

assertThat(teamA.get(team.name)).isEqualTo("teamA");
assertThat(teamA.get(member.age.avg())).isEqualTo(15);

}
 
 
어째서 join_on_filtering() 에서는 team.name으로 참조를 하지 못하는것일까요??
 

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 우와아앙님

다음 부분을 보시면 답을 찾을 수 있습니다.

.select(member, team)

이렇게 하면 프로젝션 대상이 member, team입니다. 따라서 튜블에 들어가는 데이터도 member, team 객체가 들어가게 됩니다.

따라서 데이터를 조회할 때는 다음과 같이 조회하시면 됩니다.

member1.get(team).getName()

감사합니다.

우와아앙님의 프로필 이미지
우와아앙

작성한 질문수

질문하기