SemanticException: Could not interpret path expression '~~~~~'

0

Kotlin

목록 보기
31/32

QueryDsl로 페이지네이션을 처리하는데 문제가 발생했다.
org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.query.SemanticException: Could not interpret path expression '특정엔티티.completedSurveyWeek'

특정엔티티의 completedSurveyWeek를 못찾겠다고 한다.
위의 값을 사용하는 부분은 where 절에 들어가는 BooleanExpression? 인데,

private fun statusEq(status: Status): BooleanExpression? =
        when (status) {
            1 -> 특정엔티티.completedSurveyWeek.isNull
            2 -> 특정엔티티.completedSurveyWeek.eq(숫자)
            3 -> 특정엔티티.completedSurveyWeek.ne(숫자)
            4 -> null
        }

대충 위와 같이 구성돼있다. (1,2,3,4 모두 임의의 값이다)

status = 4로 요청할 경우 null로 page를 잘 불러오는데, 1/2/3 을 요청하는 경우 응답을 불러오지 못하는 것이다.

실행되는 sql을 datagrip에서 직접 실행해봐도 잘 돌아가는데 뭐가 문제였을까?

정답은 페이지네이션의 응답값을 return PageImpl(content, pageable, countQuery) 와 같이 응답하는데,
1. content에 들어가는 페이지는 a 라는 테이블에 b,c 라는 테이블을 left join했고
2. countQuery에서 날린 쿼리에는 a 라는 테이블의 count만 구할 뿐 b,c라는 테이블은 join하지 않고 b테이블의 컬럼이 조건으로 들어있는 statusEq()를 where절에 넣어놨던 것이다.

출처

profile
백엔드를 공부하고 있습니다.

0개의 댓글