본문 바로가기

Slack 채널 정리

Native Query 사용 시 Space is not allowed after parameter prefix ':' 에러 처리 방법

mariaDB, JPA 에서 Native Query 사용 중인데 쿼리 내에서 변수 사용하려고 하니 org.hibernate.QueryException: Space is not allowed after parameter prefix ':' 에러 발생.

SELECT ..., @curr_dist := NVL(ST_DISTANCE(mach_pt, lag0), 0) AS mov_dist,
   CASE
   WHEN @curr_dist > 0 && @prev_dist = 0 THEN 'S'
   WHEN @curr_dist = 0 && @prev_dist > 0 THEN 'E'
   WHEN @curr_dist = 0 && @prev_dist = 0 THEN 'C'
   ELSE 'M'
   END run_flag
...

위 쿼리에서  '@curr_dist :='  의 ':= ' 부분에서 말썽.


'\\:= '  백슬래쉬 두 개 붙여주면 된다는 곳이 많아 시도해보았지만 동일한 증상. 변수 사용 안하고 원래대로 길게 다시 풀어쓰려다가 마지막이다란 마음으로 검색해보는데 Hibernate 4.3.7 이상부터는 백슬래쉬 1개만 쓰면 된다는 얘기가 어디 있길래 시도해봤더니 문제 없이 잘 되는군요.

요약 :  JPA Native Query 쓸 때 Space is not allowed after parameter prefix ':'  에러 발생하면 하이버네이트 버전에 따라 '\\:= '  나 '\:= ' 로 수정해 사용해보세요.