트러블 슈팅 작성중 ...
지역코드와 정렬타입을 parameter로 course 목록을 가져오는 코드.
(버전화해서 기록할 목적으로 querydsl을 쓰지않았고, 분리하지도 않았음)
:regionCode
는 잘 바인딩되지만 orderType
은 바인딩 되지 않았다.
함수의 매개변수로 제대로 넘어오고 있는 것은 확실했다.
@Query("SELECT c FROM Course c " +
"LEFT JOIN CourseProgress cp ON c.id = cp.course.id " +
"WHERE (:regionCode IS NULL OR c.regionId = :regionCode) " +
"GROUP BY c " +
"ORDER BY " +
"CASE WHEN :orderType = 'LATEST' THEN c.createdAt " +
" WHEN :orderType = 'POPULAR' THEN COUNT(cp.id) " +
"END DESC")
Page<Course> findAllCourseByCondition(
@Param("regionCode") Integer regionCode,
@Param("orderType") String orderType,
Pageable pageable
);
java.lang.IllegalArgumentException: No parameter named ':orderType' in query with named parameters [regionCode]
발생
'orderType'이 바인딩 되지않음.
똥꼬쇼 스타트.
orderType
가 제대로 바인딩 되는지 확인하려고 WHERE절에 무의미하게 적었다.
그런데 where절에서 제대로 바인딩되는 것은 물론이고, ORDER BY 뒤 CASE WHEN에서도 제대로 바인딩 되었다.
@Query("SELECT c FROM Course c " +
"LEFT JOIN CourseProgress cp ON c.id = cp.course.id " +
"WHERE (:regionCode IS NULL OR c.regionId = :regionCode ) " +
"AND :orderType = :orderType "
"GROUP BY c " +
"ORDER BY " +
"CASE WHEN :orderType = 'LATEST' THEN c.createdAt " +
" WHEN :orderType = 'POPULAR' THEN COUNT(cp.id) " +
"END DESC")
Page<Course> findAllCourseByCondition(
@Param("regionCode") Integer regionCode,
@Param("orderType") String orderType,
Pageable pageable
);
작성 중 ...
https://forum.cuba-platform.com/t/jpql-order-by-clause-with-case-when-ignored/9342