강사님 Pageable->OrderSpecifier 변환 질문이 있습니다.
강의는 스프링 데이터 페이징 활용 3 - 컨트롤러 개발
시간은 6:33
코드는
for (Sort.Order o : pageable.getSort()) {
PathBuilder pathBuilder = new PathBuilder(member.getType(), member.getMetadata());
query.orderBy(new OrderSpecifier(o.isAscending() ? Order.ASC : Order.DESC,pathBuilder.get(o.getProperty())));
List<MemberTeamDto> content = query.fetch();
}루트 엔티티가 현재는 member 입니다.
직접 테스트해보고 싶어서 임의의 엔티티 user를 만들고 left join으로 묶었습니다
@Override
public Page<MemberTeamDto> searchPageComplex(MemberSearchCondition condition,
Pageable pageable) {
JPAQuery<MemberTeamDto> query = factory
.select(new QMemberTeamDto(
member.id,
member.username,
member.age,
team.id,
team.name,
user.name))
.from(member)
.leftJoin(member.team, team)
.leftJoin(user).on(team.id.eq(user.id))
.where(usernameEq(condition.getUsername()),
teamNameEq(condition.getTeamName()),
ageGoe(condition.getAgeGoe()),
ageLoe(condition.getAgeLoe()))
.offset(pageable.getOffset())
.limit(pageable.getPageSize());
JPAQuery<Long> countQuery = factory
.select(member.count())
.from(member)
.leftJoin(member.team, team)
.where(usernameEq(condition.getUsername()),
teamNameEq(condition.getTeamName()),
ageGoe(condition.getAgeGoe()),
ageLoe(condition.getAgeLoe()));
for (Sort.Order order : pageable.getSort()) {
PathBuilder pathBuilder;
if (order.getProperty().equals("name")) {
pathBuilder = new PathBuilder<>(user.getType(), user.getMetadata());
} else {
pathBuilder = new PathBuilder<>(member.getType(), member.getMetadata());
}
query.orderBy(new OrderSpecifier(order.isAscending()? Order.ASC:Order.DESC,pathBuilder.get(order.getProperty())));
}
List<MemberTeamDto> content = query.fetch();
return PageableExecutionUtils.getPage(content, pageable, countQuery::fetchOne);
}left join user를 추가하고 조건은 user.id = team.id 로 했습니다.
http://localhost:8080/v2/members?page=0&size=3&sort=name,asc&sort=username,asc실행되는 SQL은
select
m1_0.member_id,
m1_0.username,
m1_0.age,
m1_0.team_id,
t1_0.name,
u1_0.name
from member m1_0
left join team t1_0 on t1_0.team_id=m1_0.team_id
left join users u1_0 on m1_0.team_id=u1_0.id
order by
u1_0.name,
m1_0.username
limit 0,3;단순한 경우에는 상관이 없지만 조인하는 경우에는 동작을 잘 안한다고 설명을 해주셔서
간단하게 테스트를 해봤는데 동작을 하더라구요
강의 이후에 오류가 수정되어 해결이 된건지 아니면 제가 테스트를 잘못한걸까요?
아니면 강사님께서 말씀하신 경우가 이 경우가 아닌 걸까요 ?
답변 2
2
안녕하세요. kamser님
상황에 맞게 pathBuilder를 잘 지정해주셔서 작동한 것 같네요 🙂
문제가 안된다면 사용하셔도 괜찮을 것 같아요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
강의 관련 깊이 있는 질문을 주셨네요. 질문하신 내용은 Querydsl에서 Pageable 객체를 OrderSpecifier로 변환하는 과정과 관련된 것으로 보입니다. 관련하여 김영한 강사님께서 답변하신 유사한 질문을 찾아보았으나, 정확히 일치하는 상황은 확인되지 않았습니다.
더 자세한 답변을 원하신다면, 인프런의 강의 Q&A 게시판에 질문을 올려보시는 것이 좋을 것 같습니다. 해당 게시판에는 이미 많은 질문과 답변이 있으므로 강의 내용에 대한 추가적인 이해와 해결책을 얻으실 수 있을 것입니다.
게시글 제목을 참고하여 링크를 찾을 수 있게 해드리겠습니다. 다음은 스프링 데이터 JPA 페이징과 정렬, Querydsl과 관련된 유사한 질문입니다.
질문의 내용을 더 상세히 이해하고자 한다면 위 링크로 이동하여 유사한 상황에서의 답변을 찾아보시기 바랍니다.
SpringBoot 4.X에서의 Querydsl 설정
0
88
2
querydsl 오픈소스에 대한 질문
0
72
1
예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?
0
109
1
Querydsl 6.X버전에 대해서 어떻게 생각하시나요?
0
317
2
여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요
1
70
1
fetchResults()는 더이상 권장되지 않는다는데 맞나요?
0
160
1
querydsl sum() 메서드 없어요.
0
159
2
build 디렉터리 생성
0
136
2
자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?
0
114
2
현재 Querydsl에서 from절 서브쿼리를 지원하나요?
0
91
1
오타 제보 드립니다.
0
72
2
벌크 연산과 flush, clear
0
76
1
Run As Intellij 로 변경시 Q타입 import 불가
0
88
1
QHello import하기 문제 발생
0
147
2
등록된 함수 보는법(H2Dialect) 질문
0
68
2
5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의
1
196
2
[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??
1
200
1
querydsl 설정 문제
0
222
2
quey dsl 설정부분
0
158
2
count 쿼리 관련 질문입니다!
0
75
1
stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.
0
89
1
답변부탁드리겠습니다.
0
89
2
(OrderSpecifier)관련 내용 어디있을가요
0
65
1
중급문법 벌크연산에서
0
81
2





