객체지향 쿼리 언어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;
-
댓글남기기