JDBC로 작성했던 코드를 JPA로 변경하고 있는데 timezone 설정이 필요해서 Repository에 직접 쿼리문을 작성해주었다.
@Query를 사용해서 직접 쿼리문을 작성해주었고 SQL 문법상의 오류도 없는 문장이기 때문에 코드 작성을 마치고 냅다 실행해보았다.
antlr.NoViableAltException: unexcepted token: SET 에러가 발생했다.
내가 어노테이션 안에 직접 작성해주었던 쿼리문 속 SET 키워드를 인식하지 못하고 있는 것 같았다.
JPA에서 직접 쿼리를 작성할 수 있는 방법은
- 일반 SQL로 작성
- JPQL로 작성
2가지가 있다.
JPQL은 JPA의 일부분으로 정의된 플랫폼 독립적인 객체지향 쿼리 언어를 의미한다.
따라서 JPA에서 일반 SQL은 데이터베이스의 관점에서 작성, JPQL은 엔티티 클래스의 관점에서 작성해야 한다는 특징이 있다.
JPQL과 일반 SQL은 @Query 어노테이션을 사용하며
- 일반 SQL → nativeQuery = true
- JPQL → nativeQuery = false (default)
nativeQuery 속성으로 일반 SQL과 JPQL을 구분하기 때문에
일반 SQL을 사용한다면 default가 false이므로 꼭 nativeQuery=true를 써주어야한다!
'Framework > Spring' 카테고리의 다른 글
[SpringBoot] Swagger 3.0 + 전역적 Bearer 토큰 적용 (0) | 2023.10.31 |
---|---|
[SpringBoot] Naver CLOVA Sentiment를 활용한 감정분석 (0) | 2023.08.30 |
[SpringBoot] ChatGPT를 활용한 API 작성 (0) | 2023.08.21 |
[SpringBoot] JPA ConverterNotFoundException 에러 (0) | 2023.05.16 |
[SpringBoot] IntelliJ 2022.3 Gradle로 실행돼서 너무 느린 경우 (0) | 2023.03.30 |