join 하고 중복된 데이터를 제거하기 위해 select절에 서브 쿼리를 작성한다
fun findWithdrawMember(): List<WithdrawMemberList> {
return queryFactory.select(
QWithdrawMemberList(
member.id,
JPAExpressions.select(memberToken.ipAddress).from(memberToken).where(memberToken.id.eq(member.id)).orderBy(
memberToken.id.desc()).limit(1),
member.createdAt.stringValue(),
member.updatedAt.stringValue()
)
).distinct().from(member).leftJoin(memberToken).distinct().on(
member.id.eq(
memberToken.member.id
)
).where(member.withdraw.eq(1)).orderBy(member.updatedAt.desc())
.fetch()
}
원하는 컬럼의 조건을 JPAExpressions으로 생성하여 조회하였다
리턴하는 데이터 타입은 DTO로 조회하여 별칭을 따로 작성할 필요는 없었는데
DTO를 사용하지 않고 조회하려면 ExpressionUtils.as()를 사용하여 별칭을 정의할 수 있다
ExpressionUtils.as(JPAExpressions.select(memberToken.ipAddress).from(memberToken).where(memberToken.id.eq(member.id)).orderBy(memberToken.id.desc()).limit(1),"ip")
반응형
'Kotlin' 카테고리의 다른 글
[Spring Boot] 스프링 부트 시작 - 프로젝트 만들기 (0) | 2023.02.19 |
---|---|
ModelAndView에서 Thymeleaf 사용하기 (0) | 2022.12.14 |
[QueryDSL] 동적 쿼리 작성하기/BooleanBuilder, BooleanExpression (0) | 2022.12.07 |
Spring Boot REST API Key 만들어서 적용하기 (0) | 2022.11.15 |
[Spring Boot] Interceptor로 토큰 검증 적용 (0) | 2022.11.10 |
댓글