본문 바로가기
Kotlin

QueryDSL select절에 subQuery 조회

by 고체물리학 2022. 12. 13.

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")

 

 

반응형

댓글