728x90
- Criteria 쿼리는 JPQL을 자바 코드로 작성하도록 도와주는 빌더 클래스 API다.
- Criteria를 사용하면 문자가 아닌 코드로 JPQL을 작성하므로 문법 오류를 컴파일 단계에서 잡을 수 있고 문자 기반의 JPQL보다 동적 쿼리를 안전하게 생성할 수 있는 장점이 있다.
- 하지만 실제 Criteria를 사용해서 개발해보면 코드가 복잡하고 장황해서 직관적으로 이해가 힘들다는 단점도 있다.
//JPQL: select m from Member m
CriteriaBuilder cb = em.getCriteriaBuilder(); //Criteria 쿼리 빌더 ...1
//Criteria 생성, 반환 타입 지정 ...2
CriteriaQuery<Member> cq = cb.createQuery(Member.class);
Root<Member> m = cq.from(Member.class); //FROM 절 ...3
cq.select(m); //SELECT 절 ...4
TypedQuery<Member> query = em.createQuery(cq);
List<Member> members = query.getResultList();
- Criteria 쿼리를 생성하려면 먼저 Criteria 빌더를 얻어야 한다. Criteria 빌더는 EntityManager나 EntityManagerFactory에서 얻을 수 있다.
- Criteria 쿼리 빌더에서 Criteria 쿼리를 생성한다. 이때 반환 타입을 지정할 수 있다.
- FROM 절을 생성한다. 반환된 값 m은 Criteria에서 사용하는 특별한 별칭이다. m을 조회의 시작점이라는 의미로 쿼리 루트(Root)라 한다.
- SELECT 절을 생성한다.
이렇게 Criteria 쿼리를 완성하고 나면 다음 순서는 JPQL과 같다. em.createQuery(cq)에 완성된 Criteria 쿼리를 넣어주기만 하면 된다.
출처 : JAVA 표준 ORM JPA 프로그래밍 (저자 김영한)
728x90
'JPA' 카테고리의 다른 글
컬렉션 엔티티 조회 + 페이징을 함께 해결 (feat. default_batch_fetch_size) (0) | 2022.06.16 |
---|---|
QueryDSL(Criteria 보다 더 나은 JPQL 빌더) (0) | 2022.06.16 |
페치 조인과 일반 조인의 차이(feat. 연관된 엔티티 함께 조회) (0) | 2022.06.15 |
페이징 API (0) | 2022.06.15 |
프로젝션 NEW 명령어 (0) | 2022.06.14 |