IllegalStateException 과 @Param

시은·2024년 2월 18일
0
post-thumbnail

아래와 같이 쿼리를 작성했더니

@Query("SELECT e.category, SUM(e.expenditureAmount) FROM Expenditure e WHERE e.user.id = :userId AND e.expenditureAt BETWEEN :startDate AND :endDate GROUP BY e.category")
List<Object[]> findUserExpendituresByDateAndCategory(Long userId, LocalDate startDate, LocalDate endDate);

IllegalStateException 이 저를 반겨줬습니다. 왜 그런걸까요? 🫠

java.lang.IllegalStateException: For queries with named parameters you need to provide names for method parameters; 
Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters
at org.springframework.data.jpa.repository.query.QueryParameterSetterFactory$BasicQueryParameterSetterFactory.lambda$getName$2(QueryParameterSetterFactory.java:251) ~[spring-data-jpa-3.0.4.jar:3.0.4]

@Query 내의 JPQL 쿼리에서 :userId, :startDate, :endDate 라는 명명된 파라미터를 사용했으면서 메소드에서는 이를 명시적으로 지정해주지 않았기 때문입니다. 따라서 아래와 같이 수정해주면 제대로 동작하게 됩니다.

@Query("SELECT e.category, SUM(e.expenditureAmount) FROM Expenditure e WHERE e.user.id = :userId AND e.expenditureAt BETWEEN :startDate AND :endDate GROUP BY e.category")
List<Object[]> findUserExpendituresByDateAndCategory(@Param("userId") Long userId, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);
profile
창의력 대장이 되기 위한 여정

0개의 댓글