개발/spring
[이슈해결][jpa] native query에서 사용자 변수 사용 시
방푸린
2024. 2. 7. 13:59
반응형
환경: springboot2.7.6(hibernate core 5.6.14), spring-jpa, java 11, mysql5.7
spring jpa를 이용하여 아래 쿼리를 질의하려고 할 때
select (@rank := @rank +1) as ranking,
hutw.*
from user_stat_weekly hutw, (select @rank := 0) as ranking
where hutw.start_date ='2024-02-05'
order by hutw.prize_total desc
@를 사용한 사용자 변수는 native query를 사용해야 한다.
허나 그냥 사용하면 아래와 같은 에러가 발생한다.
Caused by: org.hibernate.QueryException: Space is not allowed after parameter prefix ':'
:= @rank 이 부분에서 발생하는 것인데, 하이버네이트 버전에 따라 역슬래시를 하나나 두 개 넣어야 한다고 한다.
내가 사용하는 버전에서는 아래처럼 두 개 넣었더니 성공한다.
SELECT (@rank \\:= @rank +1) ...
잘 지나가나 싶어서 실행해 보면 아래 에러가 발생하는데, 해당 에러는 native query 결과를 object에 세팅할 때 class를 매핑해서 나는 것으로 projection interface로 바꾸면 해결된다.
No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type
728x90
반응형