6-1 @Query 부분
624
작성한 질문수 18
org.springframework.dao.InvalidDataAccessApiUsageException: 에 대해서 ...
org.springframework.dao.InvalidDataAccessApiUsageException:,For queries with named parameters you need to use provide names for method parameters.,Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.;,nested exception is java.lang.IllegalStateException:,For queries with named parameters you need to use provide names for method parameters.,Use @Param for query method parameters, or when on Java 8+ use the javac flag -parameters.
강사님은 아래와 같이 @Param 을 붙여주지 않았는데도 에러가 안나셨는데 혹시 어떤 설정을 제가 놓친걸까요 .. ?
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
@Query("select o from Order o where o.registeredDateTime >= :startDateTime" +
" and o.registeredDateTime < :endDateTime" +
" and o.orderStatus = :orderStatus")
List<Order> findOrdersBy(@Param("startDateTime") LocalDateTime startDateTime,
@Param("endDateTime") LocalDateTime endDateTime,
@Param("orderStatus") OrderStatus orderStatus);
}
답변 2
0
안녕하세요, FULL님! :)
당시 실행하셨던 환경을 확인해봐야 해서 정확한 답변을 드리기는 어렵지만, 아마 자바 컴파일러 차이였지 않을까 싶은데요. (컴파일러 옵션)
강의 중에 다루지는 못했지만 이런 문제 때문에 명시적으로 붙여주는 것이 좋다고 생각합니다 ㅎㅎ
관련해서 비슷한 질문/답변 첨부 드려요!
https://www.inflearn.com/questions/367372/param-%EC%83%9D%EB%9E%B5
감사합니다 :)
0
안녕하세요, 인프런 AI 인턴이에요.
@Query 어노테이션을 사용하여 직접 쿼리를 작성할 때, 쿼리의 매개변수에 파라미터로 전달되는 값을 바인딩하기 위해서는 @Param 어노테이션을 사용해야 합니다.
그러나 위의 예제 코드에서 @Param 어노테이션이 붙지 않아도 동작하는 이유는 스프링 프레임워크 4.3 이후부터는 문자열로 명명된 파라미터를 지원하기 때문입니다.
따라서 @Param 어노테이션이 없어도 매개변수의 이름과 쿼리 안의 파라미터 이름이 동일하다면 자동으로 바인딩 됩니다.
하지만 이 기능을 사용하려면 자바 컴파일러에게 메서드 파라미터 이름을 유지하도록 컴파일러 옵션을 설정해야 합니다.
자바 8 이후 버전의 컴파일러는 자동으로 메서드 파라미터의 이름을 유지하도록 설정되어 있지만, 그 이전 버전의 자바 컴파일러는 이 옵션이 기본적으로 비활성화되어 있습니다.
따라서 자바 8 이전 버전을 사용하고 계신다면, 당시에는 원하는 실제 파라미터 이름을 사용하지 않았기 때문에 @Param 어노테이션을 명시적으로 추가해야 했을 가능성이 있습니다.
하지만 자바 8 이후 버전을 사용하고 있다면 @Param 어노테이션을 추가하지 않아도 동작할 수 있습니다.
현재 코드가 정상적으로 동작하고 있다면, 버전에 따른 자동 바인딩이 적용된 것이니까 따로 설정할 필요는 없습니다. 문제가 발생하지 않는다면 그대로 사용하시면 되요.
추가적인 문제가 있으시다면, 스프링 버전과 자바 컴파일러 버전에 대한 정보를 공유해주시면 더 정확한 답변을 드릴 수 있을 것 같아요.
더 궁금한 점이 있다면 언제든지 물어보세요! 수고하세요.
private 상수 테스트 관련 질문
0
83
1
void는 어떻게 테스트하나요..? void로 애초에 코딩하면 안되나요??
0
125
2
커버리지는 어떻게 활용하시는지 궁금합니다.
0
160
2
테스트 문서화 질문입니다
0
105
2
단위테스트 질문이 있습니다
0
96
2
컨트롤러는 모킹을 한 이유가 궁금합니다.
0
101
2
ERD 가장자리에 있는 도메인 테스트 질문
0
88
2
DTO 검증 필드에 대한 테스트 코드 작성은 어디까지?
0
135
2
OrderCreateRequest DTO에 대해서 궁금한점
0
102
2
고전파의 테스트 대역 사용 대상, 공유 의존성
0
155
2
계층 관련 질문이 있습니다.
0
138
3
'코틀린'에서는 빌더를 따로 쓰지 않는데, 이 때는 어떻게 test fixture를 만드시는지 궁금합니다
1
123
2
혹시 update 로직은 어떻게 테스트하나요? (@Setter?)
0
134
2
단위테스트와 통합테스트의 경계가 궁금합니다.
0
228
2
Service+Repository 통합테스트 관련 질문입니다.
0
150
2
OrderControllerDocsTest 작성 해봤는데요. 날짜 형식이 이상하게 나와요
0
184
2
test 용 .yml
0
90
2
throws Exception
0
79
2
카페키오스크 클래스 문의 ,,
0
88
2
Rest docs 문서용 테스트코드를 따로 작성해야 되나요?
0
173
2
테스트 코드에서 필요한 생성자
0
138
1
tearDown 순서
0
116
2
@Builder 생성자 private
0
136
2
@DisplayName gradle / intellJ
0
93
2





