- 개요
@Query
- 스프링 데이터 JPA에서 제공하는
- org.springframework.data.jpa.repository.Query
- 어노테이셔느으로 레포 메서드에 직접 쿼리 정의가능
이름 없는 Named 쿼리
라고 할 수 있다네요
- 스프링 데이터 JPA에서 제공하는
- JPQL 로 사용해보기
public interface MemberRepository extends JpaRepository<Member, Long> { @Query("select m from Member m where m.name = :name") List<Member> findByName(@Param("name") String name); }// :name 에 ?1 <- 이런식으로 매핑을 한다면 위치기반으로 매핑이 가능합니다. 그렇게도 써보시죠..
@Test void testQueryByJPQL() { List<Member> member = memberRepository.findByName("상준"); System.out.println("member = " + member); }
select m1_0.id,m1_0.name from member m1_0 where m1_0.name='상준'; member = [Member(id=1, name=상준)]
- 네이티브 SQL 쿼리 정의
@Test void testQueryByNative() { Member member = memberRepository.findByNameNative("상준"); System.out.println("member = " + member); }
public interface MemberRepository extends JpaRepository<Member, Long> { @Query(value = "select * from member where name = ?0", nativeQuery = true) Member findByNameNative(String name); }
- 위 처럼 책 예제와 비슷하게 수행했건만..
Caused by: java.lang.IllegalArgumentException: Index position must be greater zero
가 발생한다.
인덱스 포지션이 0보다 커야한다?
바로
@Query(value = "select * from member where name = ?1", nativeQuery = true) Member findByNameNative(String name);
이렇게 수정했더니 쿼리가 올바르게 돈다.
data-jpa 버전이 오르면서 질의법도 변경된건가 싶다.
@Query
를 사용하는 경우에는 쿼리에 대한 단위테스트 검증도 필요할거같기도하다..사람이 짠건 자바 조상님이 와도 검증은 필요하다고 본다.
Uploaded by N2T
'자바 > QueryDsl' 카테고리의 다른 글
[DataJpa] DataJpa 페이징과 정렬 (0) | 2023.11.17 |
---|---|
[QueryDsl+DataJpa] QueryDslRepositorySupport 사용! (0) | 2023.11.17 |
[DataJpa] 벌크성 수정 쿼리 (0) | 2023.11.17 |
[QueryDSL] 프로젝션과 결과의 반환 (0) | 2023.11.15 |
[DataJpa] 데이터 JPA 공통 인터페이스 (0) | 2023.11.15 |