• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

where 절에서 alias를 사용하려면 어떻게 해야할까요?

22.12.03 01:30 작성 22.12.04 00:58 수정 조회수 281

0

List<UserDto> fetch = queryFactory
     .select(Projections.bean(UserDto.class,
             member.username.as("name),
             ExpressionUtils.as(
                    JPAExpressions
                           .select(item.itemCnt.max())
                           .from(item), "itemCount"))
         ).from(member)
          .fetch();

위의 샘플과 같이 member 테이블 안에서 item의 서브쿼리를 사용합니다.

위와같이 작성해서 실행을 하는데는 아무런 문제가 없습니다.

그런데 문제가 되는 부분이

where절에서 서브쿼리로 작성된 itemCount의 범위를 검색을 하려고 하는데 어떤식으로 처리를 해야할지 난감합니다.

 

이리저리 검색을 해서 아래와 같은 방법으로 비슷하게 구현을 한 방법이 있기는 한데

Path<Long> itemCountAlias = Expressions.numberPath(Long.class, "itemCount");

적용을 해 봐도 적용이 안됩니다.ㅠㅠ

오류가 itemCnt 이름의 칼럼이 없습니다.

라는 오류만 뿌려줍니다.

private BooleanExpression whereByItemCond(SearchOption searchOption, Path<Long> aliasQuantity) {
     String cnt = searchOption.getSearchCount();
     if(searchOption.getSearchType().equals("itemCount")){
          return aliasQuantity != null ? aliasQuantity.eq(String.valueOf(cnt)) : null;
     }    
}

 

서브쿼리에 추가한 Alias를 조건 검색문에서 검색할려면 어떤식으로 처리를 해야할까요?

 

혹시 제가 접근 방법을 잘못 알고 있다면 어떤식으로 처리를 해야할까요?

결론적으로 구현하고 싶은 것은

A, B 테이블이 있는데 A테이블에서 서브쿼리로 B테이블의 특정 값을 추가해서 목록으로 뿌려주고 있는데
검색 조건을 A테이블에서가 아닌 B테이블에 있는 값(A+B테이블의 조합으로 만들어진 목록 데이터값)을 필터링해서 검색을 하려고 합니다.

 

제목 | 작성자 | 아이탬 수
---------------------
첫째 홍길동 4
둘째 김길동 5
셋째 박길동 2

이런식으로 목록을 보여주는 화면이 있는데 제목과 작성자는 member테이블에서, 아이템수는 item 테이블에서 가져왔습니다.
쿼리는 위에서 적은것과 같이 기본 member테이블에서 item테이블을 서브쿼리를 사용해서 값을 추가했습니다. ExPressionUtils.as(JPAExpression.select~~)

여기서 기본검색(?)조건인 제목, 작성자 검색은 문제가 없는데, 서브쿼리로 추가했던 아이템 수로 검색을 하려고 합니다.

B테이블은 A테이블을 ManyToOne으로 설정이 되어 있습니다.

답변 1

답변을 작성해보세요.

0

안녕하세요. 인프러너님

저도 정확히 잘 모르겠습니다. 혹시 도움이 될지 모르니 다음을 참고해주세요.
https://www.inflearn.com/questions/71345/case-%EB%AC%B8

잘 아시는 분이 있으면 답변 부탁드립니다.

감사합니다.