Framework/Spring

[SpringBoot] JPA NoViableAltException: unexpected token: value 에러

aeeazip 2023. 4. 2. 22:44

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를 써주어야한다!