[JPA] Projection

3062 단어 JPAJPA

정의

select 절에 조회 대상을 지정하는 것을 프로젝션이라 한다.

JPA로 프로젝트를 진행하다보면 select 결과를 entity 로 반환하는 것보다 필요한 정보로 조회해야할 일이 많다.

(참고로 나는 조인 설정한 Entity를 불러오는데 순환참조 문제가 생겨서 이를 프로젝션으로 해결했다.)

인터페이스 이용

프로젝션을 이용하기 위한 방법으로 인터페이스를 이용하는 방법이 있다.

Interface에 가져올 컬럼을 get + 필요한컬럼(필드 이름) 방식으로 method를 만들어서 프로젝션에 이용하는 것이다.

(아직 사용해본 적은 없는데 JPA Query Method 에서 보통 사용하는 것 같다. 이후에 사용해보고 정리해보려고 한다.)

클래스 이용

projection 에서 new 키워드를 이용하는 방법이 있다.

@Query("select new com.coha.toy.reservation.category.dto.CategoryDto(c.id, c.name, count(c.id)) "
		```생략
List<CategoryDto> findCategories();

위와 같이 조회 대상을 DTO로 정의하고 가져오는 것이다.

혹은 QueryDsl을 사용할 때,

public List<CategoryDto> findCategories() {
        return jpaQueryFactory
                .select(Projections.fields(CategoryDto.class,
                        category.id, category.name, category.id.count().as("count")))
        ```생략        
}

Projections 클래스에서 제공하는 bean, fields, constructor를 통해 프로젝션을 이용할 수 있다.

좋은 웹페이지 즐겨찾기