자바 ORM 표준 JPA 프로그래밍
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788960777330
식별자로 조회와 객체 그래프 탐색 만으로는 복잡한 조회가 어렵다.
JPQL과 같은 객체지향 쿼리를 사용하면 복잡한 조회도 가능하다.
엔티티 객체를 조회하는 객체지향 쿼리다.
SQL을 추상화하여 특정 데이터베이스에 의존하지 않기 때문에 다른 데이터베이스로 바꿔도 방언 설정만 수정하면 JPQL 수정없이 사용가능하다.
엔티티 직접 조회, 묵시적 조인, 다형성 지원으로 SQL보다 간결하다.
em.createQuery(JPQL 쿼리, 엔티티 클래스 타입).getResultList();
로 쿼리를 실행하고 결과를 받을 수 있다.
JPQL을 생성하는 빌더 클래스이다.
문자가 아닌 프로그래밍 코드로 JPQL을 작성할 수 있다.
JPQL은 오타가 있어도 컴파일을 성공하고 애플리케이션 서버에 배포되어 런타임에 오류가 발생한다.
Criteria는 코드로 JPQL을 작성하므로 컴파일 시점에 오류를 발견할 수 있다.
또 IDE를 사용하면 코드 자동완성을 지원한다.
동적 쿼리를 작성하기도 편하다.
m.get("username") 에서 메타모델을 사용하면 "username"을 문자열이 아닌 코드로 m.get(Member_.username) 이렇게 작성 가능하다.
Criteria가 가진 장점이 많지만 너무 복잡하고 장황하여 사용하기 불편하고 가독성이 떨어진다.
JPQL 빌더 역할을 한다.
코드 기반이면서 단순하고 사용하기 쉽다.
작성한 코드도 JPQL과 비슷해서 한눈에 들어온다.
JPA 표준은 아니고 오픈소스 프로젝트이다.
어노테이션 프로세서를 사용해서 쿼리 전용 클래스를 만들어줘야한다.
SQL을 직접 사용할 수 있는 기능이다.
특정 데이터베이스만 사용하는 기능이나 JPAL이 지원하지 않는 기능을 사용해야할 때 사용한다.