[JPA] 원하는 내용만 가져오기

JPA로 조회를 하다보면 연관관계에 데이터를 모두 가져오다 보니 때때로 노출하고 싶지 않은 데이터도 가져오게 된다. 

그럴때 쓰는 방법


소스는 이전글을 참조 


2019/03/20 - [JPA] - [JPA] manytoone n+1 문제?



예를 들어 아래와 같은 member entity를 가지고 있다고 할때 

@Entity
@Getter
@Setter
public class Member {
@Id
@GeneratedValue
private Long id;
private String name;
private String phone;
private String address;

@ManyToOne
@JoinColumn(name="team_id")
private Team team;
}


api에는 id와 name만 내보내고 싶다고 할때, 아래와 같이 interface를 만든후 getter를 선언해준다. 


public interface MemberMapping {
Long getId();
String getName();
}


그리고 repository interface에서 해당 interface를 리턴값으로 넣어주면 원하는 값만 가져올수 있다. 

public interface MemberRepo extends JpaRepository<Member, Long> {
List<MemberMapping> findAllBy();
}


그런데 만약 모든정보도 가져오고 원하는것만도 가져오고 싶을땐 어떻게 해야할까?

아래와 같이 generic을 선언해주고 호출하는쪽에서 class를 파라미터로 넘겨주면 된다. 

<T> List<T> findAllBy(Class<T> type);