내부조인
- 연관 엔티티 중 겹치는 부분만 결과로 들고온다
INNERT JOIN
키워드를 사용- JOIN 만 써도 된다.
@Autowired
private EntityManager em;
@BeforeEach
void setUp() {
// 팀만들어주기
Team team = new Team();
team.setName("팀A");
em.persist(team);
// 멤버 50개 만들어주기
for (int i = 0; i < 50; i++) {
Member member = new Member();
member.setName("ipeac" + i);
member.setAge(i);
if (i % 2 == 0) {
member.setTeam(team);
}
em.persist(member);
}
}
@Test
void testInnerJoin() {
String teamName = "팀A";
String jpql = "select m from Member m inner join m.team t where t.name = :teamName";
List<Member> resultList = em.createQuery(jpql, Member.class)
.setParameter("teamName", teamName)
.getResultList();
System.out.println("resultList = " + resultList);
}
select m1_0.id,m1_0.city,m1_0.street,m1_0.zipcode,m1_0.age,m1_0.name,m1_0.team_id
from member m1_0
join team t1_0 on t1_0.id=m1_0.team_id
where t1_0.name='팀A';
resultList = [Member(id=1, name=ipeac0, team=com.example.springboot3.test.Team@4b475742, age=0, address=null, favoriteFoods=[], addressHistory=[]), Member(id=3, name=ipeac2, team=com.example.springboot3.test.Team@4b475742, age=2, address=null, favoriteFoods=[], addressHistory=[]), Member(id=5, name=ipeac4, team=com.example.springboot3.test.Team@4b475742, age=4, address=null, favoriteFoods=[], addressHistory...........
다중 엔티티 조회 (내부 조인)
- 내부 조인은 각 엔티티를 배열의 형태로 반환한다.
TypedQuery
는 당연 사용 X
Query
나Object[]
를 활용해야 한다.
String jpql = "SELECT m, t FROM Member m JOIN m.team t";
List<Object[]> result = em.createQuery(jpql).getResultList();
for (Object[] row : result) {
Member member = (Member) row[0];
Team team = (Team) row[1];
// ... 후속 처리
}
Uploaded by N2T
'자바 > JPA' 카테고리의 다른 글
[JPA] 페이징 API (0) | 2023.11.09 |
---|---|
[JPA] 집합 함수 (0) | 2023.11.09 |
[JPA] 페치 조인 (0) | 2023.11.09 |
[JPA] 컬렉션 페치 조인 (0) | 2023.11.09 |
[JPA] 페치 조인과 일반 조인의 차이점 (0) | 2023.11.09 |