Engineering Note

[JPA] QueryDsl의 join문법과 연관관계 엔티티 join에서 on절이 필요 없는 이유 본문

Server

[JPA] QueryDsl의 join문법과 연관관계 엔티티 join에서 on절이 필요 없는 이유

Software Engineer Kim 2026. 1. 15. 08:30

 

Join 문법 살펴보기

.selectFrom(itemCategory)
.join(itemCategory.item, item)

 

 

 

selectFrom

  • select().from을 축약해서 사용하는 문법
@Override
public <T> JPAQuery<T> selectFrom(EntityPath<T> from) {
    return select(from).from(from);
}

 

 

join(A, B)

  • 첫 번째 파라미터는 selectFrom 절의 객체와 join할 객체가 무엇인지를 명시해주는 파라미터
  • 두 번째 파라미터는 첫 번째 파라미터의 별칭(alias)
    • 별칭은 where절에서 별칭을 통해 필드 조건을 적용할 때 사용할 수 있다.
@Override
public <P> Q join(EntityPath<P> target, Path<P> alias) {
    return queryMixin.join(target, alias);
}

 

 

 

연관관계 엔티티 join에서 on절이 필요 없는 이유

연관관계가 있는 Entity간의 join은 SQL 처럼 on 절이 필요없는데, 그 이유는 이미 Entity 클래스를 선언할 때 Entity 간 연관관계를 맺어주었고, JPA에서 Entity가 영속화되는 순간 영속성 컨텍스트에  PK를 키값으로 특정 Entity가 영속화되기 때문에 연결할 Entity만 명시해주면, on절을 통해 어떤 PK 참조, 기준으로 연결할 지를 지정해주지 않아도 된다.

 

 

Comments