객체지향 쿼리 언어4 - Paging, Join

  • 소개
  • 기본 문법과 쿼리API
  • 프로젝션(SELECT)
  • 페이징
  • 조인
  • 서브 쿼리
  • JPQL 타입 표현과 기타식
  • 조건식 (CASE 등등)
  • JPQL 함수



01. 페이징 API

  • JPA는 페이징을 다음 두 API로 추상화
  • setFirstResult(int startPosition) : 조회 시작 위치 (0부터 시작)
  • setMaxResults(int maxResult) : 조회할 데이터 수

예시

// paging query
String jpql = 'select m from Member m order by m.name desc';
List<Member> resultList = em.createQuery(jpql, Member.class)
  .setFirstResult(10)
  .setMaxResults(20)
  .getResultList();



02. 조인

  • 내부조인
    • SELECT m FROM Member m [INNER] JOIN m.team t
  • 외부조인
    • SELECT m FROM Member m LEFT [OUTER] JOIN m.team t
  • 세타조인
    • SELECT count(m) from Member m, Team t where m.username = t.name

03. 조인 - ON 절

  • ON 절을 활용한 조인 (JPA 2.1부터 지원)
    • 조인 대상 필터링
    • 연관관계 없는 엔티티 외부 조인 (Hibernate 5.1부터)

3-1 조인 대상 필터링

  • 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인

  • JPQL

    • SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A'
  • SQL

    • SELECT m.*, t.*
      FROM Member m
      	LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='A';
      



3-2 연관관계 없는 엔티티 외부 조인

  • 회원의 이름과 팀의 이름이 같은 대상 외부 조인

  • JPQL

    • SELECT m, t FROM Member m LEFT JOIN Team t on m.username = t.name
  • SQL

    • SELECT m.*, t.*
      FROM Member m 
      	LEFT JOIN Team t ON m.username = t.name;
      

댓글남기기