HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
자바 ORM 표준 JPA 프로그래밍 - 기본편
자바 ORM 표준 JPA 프로그래밍 - 기본편
/
🔟
10.5 객체지향 쿼리 언어
🔟

10.5 객체지향 쿼리 언어

 
조인 문에 대한 예제와 테스트는 눈으로 확인 해 보고 싶어서 println으로 찍어 확인해 보았습니다.
 
셋업
@BeforeEach void setUp() { Team team = new Team("떡잎마을 방범대"); teamRepository.save(team); Team team2 = new Team("데브코스 2기 C반"); teamRepository.save(team2); User user = new User("짱구"); user.setTeam(team); userRepository.save(user); User user2 = new User("유리"); user2.setTeam(team); userRepository.save(user2); User user3 = new User("치타"); userRepository.save(user3); }
user_id
username
team_id
1
짱구
1
2
유리
1
3
치타
null
team_id
teamname
1
떡잎마을 방범대
2
데브코스 2기 C반
 

조인

이너조인

@Test void 이너조인(){ String jpql = "select u from User u join u.team t"; List<User> resultList = em.createQuery(jpql, User.class) .getResultList(); for (User user : resultList) { System.out.println("user = " + user.getUsername() + " team = " + user.getTeam().getName()); } }
Hibernate: select user_id, team_id, username from user u inner join team t on u.team_id=t.team_id user = 짱구 team = 떡잎마을 방범대 user = 유리 team = 떡잎마을 방범대

레프트 조인

@Test void 레프트조인(){ String jpql = "select u from User u left join u.team t"; List<User> resultList = em.createQuery(jpql, User.class) .getResultList(); for (User user : resultList) { System.out.println("user = " + user.getUsername() + " team = " + (user.getTeam()!=null? user.getTeam().getName() : "null")); } }
Hibernate: select user_id, team_id, username from user u left outer join team t on u.team_id=t.team_id user = 짱구 team = 떡잎마을 방범대 user = 유리 team = 떡잎마을 방범대 user = 치타 team = null

 

서브 쿼리

나이가 평균보다 많은 회원
select m from Member m where m.age > (select avg(m2.age) from Member m2)
한건이라도주문한고객
select m from Member m where (select count(o) from Order o where m = o.member) > 0

서브 쿼리 지원 함수

  • [NOT] EXISTS (subquery)
  • {ALL|ANY|SOME} (subquery)
  • [NOT] IN (subquery)

JPA 서브 쿼리 한계

  • FROM 절에서는 사용 못함