Querydsl Join 정리

Patrick YOO·2022년 2월 14일
0
post-thumbnail

기본 조인


queryFactory.selectFrom(/*select 대상 entity*/)
.join([( 대상 entity ).(Join 대상 Entity)], [별칭])
.where ....
.fetch();

/*
queryFactory.selectFrom(member)
.join(member.team, team)  //leftJoin, rightJoin 등등..
.where ....
.fetch();
*/

조인 on


queryFactory.select([main_entity(ME)],[join_entity(JE)])
	.from([ME])
    .leftJoin([ME.JE],[별칭]).on([JE.column].eq([data]))
    .fetch();

/*
queryFactory.select(member,team)
	.from(member)
    .leftJoin(member.team,team).on(team.name.eq("abc"))
    .fetch();
*/

//위 주석 코드를 번역해보자면 member 테이블을 기준으로 left 조인이기 때문에 member 데이터는 전체를 
//다 긁어 온다음 team.name 이 abc 면 데이터 조회 다른팀 소속인 회원인 경우는 team 이 null 로 출력

//join(...).on 일경우 일반 교집합 조인과 동일

inner join 일경우 Oracle select from 조인 문법을 사용 가능하다 사실 이방법이 더 좋은듯 하다.

select(...)
from(member,order)
where(member.memberId.eq(order.memberId))

연관관계가 없는 조인 on

// 연관관계가 없는 조인같은 경우는 부모.연관컬럼  으로 join 하지 않는다.
// ex)
.select(member, team)
.from(member)
.leftJoin(team)
.where(member.username.eq(team.name))
.fetch();

// or

.select(member, team)
.from(member)
.leftJoin(team).on(member.username.eq(team.name))
.fetch();

fetchJoin 페치 조인

// Parent -> children 연관관계 테이블을 조인하여 데이터를 넣을때사용

jpaQueryFactory
  .selectFrom(memberMst)
  .join(memberMst.orders, orderMst).fetchJoin()
  .where(memberMst.memberMstId.eq("MM20220212000003"))
  .fetch();

Member 는 여러개의 주문 목록을 가질 수 있다.
이러한 상황에서 fetchJoin 을 사용했을경우 memberMst 와 관련이 있는 모든 Order 의 주입을 받아올 수 있다.
profile
자유인을 꿈꾸는 개발자

0개의 댓글