[JPA] Projection
정의
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를 통해 프로젝션을 이용할 수 있다.
Author And Source
이 문제에 관하여([JPA] Projection), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yajungi/JPA-Projection저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)