Projections
인터페이스 기반 Closed Projections
public interface UsernameOnly {
// 조회할 엔티티 필드를 getter 형식으로 지정하면 해당 필드만 선택해서 조회한다.
String getUsername();
}public interface MemberRepository extends JpaRepository<Member, Long> {
// 메서드 이름은 자유롭게 하면 되고 반환 타입으로 인지한다.
List<UsernameOnly> findProjectionsByUsername(String username);
}class MemberRepositoryTest {
@Test
public void projections() throws Exception {
Team teamA = new Team("teamA");
em.persist(teamA);
Member m1 = new Member("m1", 0, teamA);
Member m2 = new Member("m2", 0, teamA);
em.persist(m1);
em.persist(m2);
em.flush();
em.clear();
List<UsernameOnly> result = memberRepository.findProjectionsByUsername("m1");
Assertions.assertThat(result.size()).isEqualTo(1);
}
}select m.username
from member m
where m.username = 'm1';public interface UsernameOnly {
// 조회할 엔티티 필드를 getter 형식으로 지정하면 해당 필드만 선택해서 조회한다.
String getUsername();
}인터페이스 기반 Open Projections
클래스 기반 Projection
동적 Projections
중첩 구조 처리
정리
Last updated