개요
- 메소드 이름으로 쿼리 생성 기능은 파라미터가 증가하거나 쿼리가 복잡한 경우 사용하기 어렵다.
- 따라서 @Query 기능을 자주 사용하게 된다.
메서드에 JPQL 쿼리 작성
@Query("select m from Member m where m.userName = :userName and m.age = :age")
List<Member> findUser( @Param("userName") String userName, @Param("age") int age);
@Query("select m.userName from Member m")
List<String> findUserNameList();
org.springframework.data.jpa.repository.Query 어노테이션을 사용
- 실행할 메서드에 정적 쿼리를 직접 작성하므로 이름 없는 Named 쿼리라 할 수 있다.
- JPA Named 쿼리처럼 애플리케이션 실행 시점에 문법 오류를 발견할 수 있다. (매우 큰 장점!)
- Named 쿼리는 @NamedQuery 를 통해서 Entity 에 JPQL 을 정의하여 사용하는 기능
- @Query 기능이 더 좋기 때문에 실무에서 사용하지 않는다!
DTO 조회
@Query("select new study.datajpa.dto.MemberDto(m.id, m.userName, t.name) " +
"from Member m join m.team t")
List<MemberDto> findMemberDto();
- DTO로 직접 조회 하려면 JPA의 new 명령어를 사용해야 한다.
- 그리고 다음과 같이 생성자가 맞는 DTO가 필요하다.