728x90
native query에서 @rank := 0, @rownum 처럼 사용자 정의 변수 사용할때 에러 발생
Spring data JPA에서 native query를 사용할 때 @rank 함수를 적용해서 SQL문을 작성하려고 할 때 실행이 안되고 에러가 터졌다.
원인 코드
@rank := IF(@current_category = category_sn, @rank + 1, 1) AS rank
에러 원인
@rank := 0는 MySQL에서 사용되는 사용자 정의 변수(user-defined variable)다.
이것은 SQL 쿼리 내에서 값을 임시로 저장하고 참조할 수 있는 변수를 선언하게 해주는데 Hibernate나 JPA에서는 이와 같은 문법을 지원하지 않기 때문에, 쿼리를 실행할 때 위와 같은 에러가 발생한다.
또한 Hibernate는 : 뒤에 공백이 오면 안 되기 때문에, 이를 파라미터로 해석하려고 하기 때문에 실패하게 되었다.
해결
- 앞뒤 공백 제거 후 \ 역슬래시 적용하면 해결됐다!
@rank\:=IF
@rownum\\:=@rownum+1
JPA(native query)에서 MariaDB WITH RECURSIVE 작동 안되는 오류
'Spring > Spring Data JPA' 카테고리의 다른 글
JPA와 Spring Data JPA의 차이 (1) | 2024.01.02 |
---|---|
JPA N+1 문제 해결하기 (fetch join, entityGraph, batch size) (5) | 2023.12.28 |
[Spring Data JPA] ResponseDTO에 기본 생성자 있어야하는 이유 (1) | 2023.11.07 |
JPA(native query)에서 MariaDB WITH RECURSIVE 작동 안되는 오류 (1) | 2023.10.26 |
JPQL에서 limit 1 작성했을때 실행 안되는 오류 (1) | 2023.10.26 |