•
JPA는 복잡한 검색 조건을 사용해서 엔티티 객체를 조회할 수 있는 다양한 기술을 지원한다.
1. 객체지향 쿼리 소개
•
복잡한 검색 방법을 수행해 1차적으로 어느정도 데이터를 걸러줄 필요가 있을 때, JPQL을 사용해야 하며 JPQL은 다음과 같은 특징을 가진다.
◦
테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리다.
◦
SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.
1. JPQL 소개
•
JPQL은 엔티티 객체를 조회하는 객체지향 쿼리로, 문법은 SQL과 비슷하며 ANSI 표준 SQL이 제공하는 기능을 유사하게 지원한다.
•
JPQL은 SQL을 추상화하여 특정 데이터베이스에 의존하지 않는다.
•
SQL보다 간결하다. 엔티티 직접 조회, 묵시적 조인, 다형성 지원으로 SQL보다 코드가 간결하다.
2. Criteria 쿼리 소개
•
Criteria는 JPQL을 생성하는 빌더 클래스다. Criteria의 장점은 문자가 아닌 query.select(m).where(…)처럼 프로그래밍 코드로 JPQL을 작성할 수 있다는 점이다.
•
이 때문에 컴파일 시점에 오류를 발견할 수 있으며 자동완성의 도움을 받기 쉽다. 또한 동적 쿼리를 작성하기 편하다.
•
장점은 많지만 모든 장점을 상쇄할 정도로 복잡하고 장황하다. 따라서 사용하기 불편하며 가독성도 좋지 않다는 단점이 있다.
3. QueryDSL 소개
•
Criteria처럼 JPQL 빌더 역할을 수행하며 코드 기반으로 단순하고 사용하기 쉽다. 그리고 작성한 코드도 JPQL과 유사해서 한눈에 들어온다.
4. 네이티브 SQL 소개
•
JPA는 SQL을 직접 사용할 수 있는 기능을 지원하는데 이를 네이티브 SQL이라 한다.
•
JPQL을 사용해도 가끔은 특정 데이터베이스에 의존해야 하는 기능을 사용해야할 때, 네이티브 SQL을 사용한다.
•
네이티브 SQL은 em.createNativeQeury()를 사용한다.