본문 바로가기

STUDY/Spring

JPA | Querydsl 서브 쿼리

SELECT 절에서 사용하기

JPAExpressions를 이용해 서브쿼리를 작성할 수 있다.

@Override
public UserResponseDto getUserWithCount() {
    return queryFactory.select(
              Projections.constructor(
                  UserResponseDto.class,
                  user,
                  JPAExpressions.select(count(user.id))
                  .from(user)
              )
          )
          .from(user)
          .fetch();
}

서브쿼리에서도 WHERE절을 사용해 어떤 값을 검색하고자 할 때는 아래와 같이 한다.

@Override
public UserResponseDto getUserWithParentName() {
    QUser u = new QUser("u");
    return queryFactory.select(
              Projections.constructor(
                  UserResponseDto.class,
                  user,
                  JPAExpressions.select(u.name)
                  .from(u)
                  .where(u.id.eq(user.parent))
              )
          )
          .from(user)
          .fetch();
}

Projections

WHERE 절에서 사용하기

SELECT와 비슷한 방법으로 사용한다.

QEmployee employee = QEmployee.employee;
QEmployee e = new QEmployee("e");
queryFactory.selectFrom(employee)
    .where(employee.weeklyhours.gt(
        JPAExpressions.select(e.weeklyhours.avg())
            .from(employee.department.employees, e)
            .where(e.manager.eq(employee.manager))))
    .fetch();

Querydsl doc




기억보단 기록을 블로그: [Querydsl] 서브쿼리 사용하기