JPA에서 제공하는 Annotation으로 사용자가 직접 쿼리를 작성하여 데이터베이스에 질의할 수 있도록 함
주로 Repository 인터페이스의 메서드에 적용됨
더 구체적인 쿼리 메서드를 작성하기 위해 사용하는 쿼리 메서드의 custom 버전
쿼리는 기본적으로 JPA에서 사용하는 쿼리 문법인 JPQL을 사용
public interface PostRepository extends JpaRepository<Post, Long> {
@Query("select p from Post p " +
"left join fetch p.commentList c " +
"left join fetch p.user " +
"left join fetch c.user " +
"order by p.createdAt desc")
List<Post> findAllPostsWithCommentsOrderByCreatedAtDesc();
}
유연한 쿼리 작성
필요한 Entity만 조회하고 join을 최소화하여 쿼리 성능을 향상 시킬 수 있음
유지 보수가 어려움
쿼리의 복잡성이 증가할 수 있음
직접 쿼리를 작성하면 해당 쿼리는 해당 리포지토리에서만 사용되기 때문에 여러 리포지토리에서 동일한 쿼리를 재사용해야 할 경우, 중복된 코드가 발생할 수 있음