• JPA를 사용하면 엔티티 객체를 중심으로 개발할 수 있다.
  • 조인을 통한 검색 쿼리에서도 테이블이 아닌 엔티티 객체를 대상으로 검색한다.
  • JPQL
    • SQL을 추상화한 객체 지향 쿼리 언어이기 때문에 특정 데이터베이스에 의존하지 않는다.
    • JPQL은 엔티티 객체 대상 쿼리, SQL은 데이터베이스 테이블 대상 쿼리
    • 검색할 때 테이블이 아닌 엔티티 객체를 대상으로 검색할 수 있는 문법을 지원한다.
//전체 조회
List<Member> result = em.createQuery("select m from Member as m", Member.class).getResultList();
/*
select m from Member as m
↓
select
    member0_.id as id1_0_,
    member0_.name as name2_0_ 
from
    MEMBER member0_
*/
  • 작성한 쿼리를 JPA가 새로운 쿼리로 만들어낸다.
List<Member> result = em.createQuery("select m from Member as m", Member.class)
        .setFirstResult(5)
        .setMaxResults(8)
        .getResultList();
/*
select
    member0_.id as id1_0_,
    member0_.name as name2_0_ 
from
    MEMBER member0_ limit ? offset ?
*/
  • ANSI SQL이 지원하는 대부분의 쿼리를 지원하기 때문에 데이터베이스 방언에 맞춘 페이징 쿼리가 만들어진다.