@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 |
댓글