HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
자바 ORM 표준 JPA 프로그래밍 - 기본편
자바 ORM 표준 JPA 프로그래밍 - 기본편
/
🕚
11.객체지향 쿼리 언어2 - 중급 문법
/
페치 조인

페치 조인

@Test void 사용자를_조회하며_연관된_팀을_함께_조회() { em.flush(); em.clear(); String jpql = "select u from User u join fetch u.team"; em.createQuery(jpql, User.class).getResultList(); }
Hibernate: select u.user_id, u.team_id, u.username, t.teamname from user u inner join team t on u.team_id=t.team_id
notion image
사용자가 join으로 땡겨올 연관관계의 범위를 쿼리에서 설정 할 수 있음

컬렉션 페치조인의 뻥튀기

@Test void 팀을조회하는데_users를_페치조인(){ em.flush(); em.clear(); String jpql = "select t from Team t join fetch t.users"; List<Team> resultList = em.createQuery(jpql, Team.class).getResultList(); for (Team team : resultList) { System.out.println("team = " + team.getName() + " teamSize = " + team.getUsers().size()); } }
Hibernate: select t.team_id, t.teamname, u.team_id, u.username, team_id, user_id from team t inner join user u on team0_.team_id=users1_.team_id team = 떡잎마을 방범대 teamSize = 2 team = 떡잎마을 방범대 teamSize = 2
떡잎마을 방범대가 뻥튀기 되었다!
join 결과가 이런 식으로 나오기 떄문
t.team_id
t.teamname
u.team_id
u.user_id
u.username
1
떡잎마을 방범대
1
1
짱구
1
떡잎마을 방범대
1
2
유리
→ distinct!
jpa의 distinct는
sql의 distinct를 추가하고 또 애플리케이션에서 중복되는 데이터를 없애준다.