inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

order by 의 동적 정렬에 대한 질문입니다.

1112

김진태

작성한 질문수 2

0

동적 정렬을 하고 싶은데요.
원하는 결과는
1. 한글 (오름차순, 내림차순) 영어 숫자 내림차순 오름차순
2. 영어 (오름차순, 내림차순 ) 한글 숫자 내림차순 오름차순
 
입니다.
 
JPAQuery<User> content = query.selectFrom(user)
.where(
searchQueryCustom(keyword, search),
getIn(userIdListFilterByLanguage)
).orderBy(getSorting(pageable), getDirectionByName(pageable));


private OrderSpecifier<Integer> getSorting(Pageable pageable) {
for (Sort.Order order : pageable.getSort()) {
Order direction = order.getDirection().isAscending() ? Order.ASC : Order.DESC;

switch (order.getProperty()) {
case "email":
return new OrderSpecifier(direction, user.email);
case "sortKorean":
return new OrderSpecifier(direction, new CaseBuilder()
.when(user.name.between("", "")).then(1)
.when(user.name.between("a", "Z")).then(2)
.otherwise(3));
case "sortEnglish":
return new OrderSpecifier(direction, new CaseBuilder()
.when(user.name.between("a", "Z")).then(1)
.when(user.name.between("", "")).then(2)
.otherwise(3));
}
}
return null;
}

private OrderSpecifier<?> getDirectionByName(Pageable pageable) {
for (Sort.Order order : pageable.getSort()) {
return order.getDirection().isAscending() ? user.name.asc() : user.name.desc();
}
return null;
}
 
코드는 이렇게 구성되어있고 나오는 쿼리는 이렇습니다.
 
select user0_.name

from users user0_
where user0_.uuid in
('0685167f0ebd4d128c8607044e893e60', '081b37bc3661429395d366f015f55f9c', '099dcb0174bd4de693226d8785499431')
order by case when user0_.name between '' and '' then 1 when user0_.name between 'a' and 'Z' then 2 else 3 end asc,
user0_.name asc
limit 10;
 
 
제가 원하는 결과를 뽑으려면
 
select user0_.name

from users user0_
where user0_.uuid in
('0685167f0ebd4d128c8607044e893e60', '081b37bc3661429395d366f015f55f9c', '099dcb0174bd4de693226d8785499431')
order by case when user0_.name between '' and '' then 1 when user0_.name between 'a' and 'Z' then 2 else 3 end ,
user0_.name asc
limit 10;
위의 쿼리 처럼 되어야 나오는데요...
 
 
orderBy 구절에서 OrderSpecifier 타입만 넣을 수 있기 때문에 direction을 필수 적으로 넣어야 합니다..
어떻게 해야할까요.........

java JPA

답변 1

1

김영한

안녕하세요. 김진태님

이 부분은 저도 잘 모르겠습니다.

혹시 아시는 분 있으면 답변 부탁드려요.

감사합니다.

join에대해 질문드립니다.

0

23

1

SpringBoot 4.X에서의 Querydsl 설정

0

175

2

querydsl 오픈소스에 대한 질문

1

103

1

예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?

0

128

1

Querydsl 6.X버전에 대해서 어떻게 생각하시나요?

0

359

2

여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요

1

88

1

fetchResults()는 더이상 권장되지 않는다는데 맞나요?

0

174

1

querydsl sum() 메서드 없어요.

0

172

2

build 디렉터리 생성

0

154

2

자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?

0

125

2

현재 Querydsl에서 from절 서브쿼리를 지원하나요?

0

101

1

오타 제보 드립니다.

0

80

2

벌크 연산과 flush, clear

0

85

1

Run As Intellij 로 변경시 Q타입 import 불가

0

98

1

QHello import하기 문제 발생

0

158

2

등록된 함수 보는법(H2Dialect) 질문

0

81

2

5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의

1

209

2

[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??

1

215

1

querydsl 설정 문제

0

230

2

quey dsl 설정부분

0

169

2

count 쿼리 관련 질문입니다!

0

80

1

stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.

0

101

1

답변부탁드리겠습니다.

0

95

2

(OrderSpecifier)관련 내용 어디있을가요

0

68

1