(QueryDSL) fetchResults
QueryDSL은 Dynamic Query를 만들어주는 Query Builder이다.
기존에 Jooq를 사용해보긴 했지만 Jooq는 ORM이 아니라 JPA와 뭔가 잘 맞지 않을 것 같았다.
그러다보니 페이지네이션도 뭔가 짜칠 거 같고 JPA에서 제공해주는 객체 그래프 탐색 등등의 용이함을 이용할 수 없을 것 같아서 QueryDSL을 선택했다.
하지만 Is querydsl dead?란 이슈가 올라올 정도로 제대로 프로젝트가 관리되고 있지 않다.
문제
일단 QueryDSL을 사용하고 있는 프로젝트가 규모가 크지 않고, 지금 짜는 코드만 잘 돌아가면 됐지란 생각으로 코딩 중이었다.
하지만 당장 맞닥뜨린 문제는 JPA fetchCount() and group by not working이었다.
간단한 예시를 보자.
1 |
|
아래와 같은 에러 메시지가 나온다.
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: having near line 3, column 1 [select count(distinct leisure.id)
from com.leisureq.map.v5.domain.deal.leisure.Leisure leisure
having count(leisure.id) = ?1]
나는 분명 groupBy도 넣었는데 저런 오류가 나온다.
위 이슈를 fix한 풀리퀘도 있고, 메인테이너가 날린 건데 아직도 머지가 되지 않았다 -_-;;
fetchCount 대신에 아래와 같이 fetchResults()를 사용하면 오류를 피할 수 있다.1
2