본문 바로가기
기술 공부

JPA unexpected token: * 에러

by 랼랼 2022. 4. 6.
@Repository  //스프링이 관리
//JpaRepository<TodoEntity, String> 첫번째 변수 : 테이블 맵핑 엔티티 / 두번째 변수 : 엔티티의 기본키 타입
public interface TodoRepository extends JpaRepository<TodoEntity, String> {
	//?1은 메서드의 매개변수의 순서 위치 (첫번째를 뜻함)
	@Query("select * FROM Todo t WHERE t.userId=?1")
	List<TodoEntity> findByUserId(String userId);
}

 

1) 문제사항

 

책을 이용해 JPA 공부 중 쿼리 부분에서 다음과 같은 오류가 발생하였다.

 

antlr.NoViableAltException: unexpected token: *

 

단순히 *을 인식하지 못하는 문제일까?

*을 t.id로 바꿨더니 다음과 같은 오류가 발생하였다.

 

Validation failed for query for method public abstract ~

 

2) 해결

 

JPA에 직접 sql을 사용하는 것을 nativeSQL 이라고 한다.

이를 @Query에 적용하려면 nativeQuery를 true로 표시해야 한다.

@Repository  //스프링이 관리
//JpaRepository<TodoEntity, String> 첫번째 변수 : 테이블 맵핑 엔티티 / 두번째 변수 : 엔티티의 기본키 타입
public interface TodoRepository extends JpaRepository<TodoEntity, String> {
	//?1은 메서드의 매개변수의 순서 위치 (첫번째를 뜻함)
	@Query(value = "select * FROM Todo t WHERE t.userId=?1", nativeQuery = true)
	List<TodoEntity> findByUserId(String userId);
}

 

+) Entity를 이용하여 테이블을 만드는데 userId 컬럼이 존재하지 않는다는 에러가 발생하였다.

분명 여러 속성들은 존재하는데 유독 userId 컬럼에서만 에러가 발생하였다.

이유는 모르겠지만, userId -> user로 이름을 변경하니 정상적으로 작동되었다.

(이거때문에 몇 시간동안 끙끙거렸다...)

대체 왜 그럴까?

 

반응형

'기술 공부' 카테고리의 다른 글

material-ui/core 설치 문제  (0) 2022.04.08
React.js(2) Componets 와 props  (0) 2022.04.08
React.js(1)  (0) 2022.04.07
React 설치  (0) 2022.04.07
Node.js  (0) 2022.04.07

댓글