1:N 프로젝션 join
240
작성한 질문수 5
안녕하세요!
중첩 프로젝션에 대해 이것저것 해보는 도중, 1:N에 대해서도 인터페이스를 만들어 해보았습니다.
예를 들어 TeamProjection이 있을 때, 다음과 같습니다.
public interface TeamProjection {
String getName();
List<MemberInfo> getMembers();
interface MemberInfo{
String getUsername();
}
}
Team과 member의 관계는 강의에서와 동일하게 1:N 관계입니다.
TeamRepository에 메서드를 다음과 같이 정의했습니다.
public interface TeamRepository extends JpaRepository<Team, Long> {
<T> List<T> findProjectionByName(@Param("name") String name, Class<T> tClass);
}
이제 Test를 돌리기 위해 다음과 같이 테스트코드를 짜고 실행했을 때 SQL 결과입니다.
@Test
@DisplayName("프로젝션 테스트")
public void 프로젝션_테스트() throws Exception{
//given
Team team = Team.builder().name("team").build(); em.persist(team);
Member m1 = builder().username("a").age(10).team(team).build(); em.persist(m1);
Member m2 = builder().username("b").age(10).team(team).build(); em.persist(m2);
em.flush();
em.clear();
//when
List<TeamProjection> r = teamRepository.findProjectionByName("team", TeamProjection.class);
//then
for (TeamProjection teamProjection : r) {
List<TeamProjection.MemberInfo> members = teamProjection.getMembers();
for (TeamProjection.MemberInfo m : members) {
System.out.println("member : " + m.getUsername());
}
System.out.println("team : " + teamProjection.getName());
}
}
>> SQL (Team + Member + Member) 총 3회
select
team0_.team_id as team_id1_4_,
team0_.name as name2_4_
from
team team0_
where
team0_.name=?
-------
select
members0_.team_id as team_id4_3_0_,
members0_.member_id as member_i1_3_0_,
members0_.member_id as member_i1_3_1_,
members0_.age as age2_3_1_,
members0_.team_id as team_id4_3_1_,
members0_.username as username3_3_1_
from
member members0_
where
members0_.team_id=?
--------
select
members0_.team_id as team_id4_3_0_,
members0_.member_id as member_i1_3_0_,
members0_.member_id as member_i1_3_1_,
members0_.age as age2_3_1_,
members0_.team_id as team_id4_3_1_,
members0_.username as username3_3_1_
from
member members0_
where
members0_.team_id=?
질문) 1:N은 프로젝션 조회를 했을 때 join이 되지 않는 것인지 궁금합니다!
답변 1
changeTeam 메서드 질문
0
34
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
87
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
126
3
MemberRepository 구현체
0
71
1
pdf 표현 질문드립니다.
0
77
1
로그가 남지 않는 문제.
0
98
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
78
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
75
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
102
2
Sort 인터페이스는 잘 사용 안하나요?
0
59
1
스캔대상 질문드립니다.
0
48
1
하이버네이트6에서의 최적화에 이은 질문
0
92
1
save() vs saveAndFlush DB 통신 횟수
0
58
1
순수 JPA 리포지토리 코드 수정부분
0
91
2
bulk연산 후 flush하는 이유를 모르겠어요
0
163
3
bulk insert 질문입니다.
0
191
2
교만했던 것 같아요.
0
152
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
154
2
동적 테이블에 대한 질문
0
89
1
영속성 전이와 연관관계
0
141
2
강의 10:25 질문
0
78
1
단건 update 질문
0
104
2
엔티티 와 도메인의 경계
0
129
1
UsernameOnlyDto 타입 type mismatch 오류
0
123
1





