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 작동 안되는 오류
JPA(native query)에서 MariaDB WITH RECURSIVE 작동 안되는 오류
JPA(native query)에서 MariaDB WITH RECURSIVE 작동 안되는 오류 게시글 상세조회에서 댓글의 대댓글까지 가져오는 쿼리를 JPA로 작성해야 했다. 일단 DB console에서 쿼리를 작성하고 정상 작동되는 걸 확인
yijoon009.tistory.com
'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 |