Projection

엔티티의 속성들이 너무 많을 때, 일부 데이터만 가져오는 방법이다.

아래와 같이 comment 엔티티가 있다고 하자

인터페이스 기반

closed projection

위의 정보들 중 comment, up, down만 관심있다고 가정하여, 임의로 인터페이스를 만들어준다.

어떤 Post안에 있는 comment를 조회한다.(findByPost_Id)

만들어준 인터페이스 타입으로 쿼리를 만들어주고 실행시켜보면

comment, up, down 값만 select 해오는 것을 볼 수 있다.

open projection

open projection은 모든 요소를 다 가져와서 두 개의 요소를 합쳐서 보여줄 수 있다. 따라서 성능최적화는 불가능하다.

혼합

필요한 요소만 가져와서 커스텀하게 요소를 다룰 수도 있다.

클래스 기반

클래스 기반으로도 프로젝션 처리가 가능하다.
DTO를 생각하면 된다.

위의 인터페이스와 아래의 클래스는 같은 기능을 한다.

Tip

프로젝션을 여러개 만들 수도 있다.
현재 post_id 값으로 CommentSummary 타입을 가져오는 쿼리를 만들었는데, post_id 값으로 다른 값도 같이 가져올 수 있다.

예를 들어 아래와 같이 comment만 가져오는 인터페이스도 있다고 하자.

post_id값으로 값을 가져오고 싶지만, 메서드 명이 같아서 선언해줄 수가 없다.

이런 경우 Generic 타입을 사용하면 된다.

1개의 댓글

comment-user-thumbnail
2022년 10월 23일

class로 작성하니 바로 오류날라오네요..
가져와서 수정해야할 게 있는데 interface만 먹어서 갑갑하네요

답글 달기