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);