queryFactory.selectFrom(/*select 대상 entity*/)
.join([( 대상 entity ).(Join 대상 Entity)], [별칭])
.where ....
.fetch();
/*
queryFactory.selectFrom(member)
.join(member.team, team) //leftJoin, rightJoin 등등..
.where ....
.fetch();
*/
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))
// 연관관계가 없는 조인같은 경우는 부모.연관컬럼 으로 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();
// Parent -> children 연관관계 테이블을 조인하여 데이터를 넣을때사용
jpaQueryFactory
.selectFrom(memberMst)
.join(memberMst.orders, orderMst).fetchJoin()
.where(memberMst.memberMstId.eq("MM20220212000003"))
.fetch();
Member 는 여러개의 주문 목록을 가질 수 있다.
이러한 상황에서 fetchJoin 을 사용했을경우 memberMst 와 관련이 있는 모든 Order 의 주입을 받아올 수 있다.