STUDY/Spring
JPA | Querydsl 서브 쿼리
개미606
2021. 9. 7. 10:30
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();
}
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();