<aside> 😊 JPQL의 개념과 탄생배경 특징 문법들을 정리한 페이지입니다 :)
</aside>
JPQL
SQL 과 비슷한 문법을 가진 객체 지향 쿼리
JPQL의 탄생배경
JPA 에서 제공하는 메서드 호출만으로 섬세한 쿼리 작성이 어렵다는 것에 탄생
Book book = em.find(Book.class, 1);
JPQL의 특징
- 테이블이 아닌 객체를 검색하는 객체지향 쿼리
- SQL 을 추상화 했기 때문에 특정 벤더에 종속적이지 않음
- JPA 는 JPQL 을 분석하여 SQL 을 생성한 후 DB 에서 조회
기본문법
String jpql = "select c from Category c ";
<aside> ❗ JPQL 은 SQL 과 문법이 매우 유사하지만 몇 가지 다른 점이 있음
</aside>
☝️ 대소문자 구분
- 엔티티와 속성은 대소문자를 구분
ex 엔티티 이름인 User, User 엔티티의 속성인 email은 대소문자를 구분함
반면에 SELECT, FROM, AS 같은 JPQL 키워드는 대소문자를 구별하지 않음
✌️ 엔티티 이름
- 위의 예제에서 select c from 뒤에 나오는 Category 는 엔티티 이름
Category 가 클래스 이름이라고 착각할 수 있는데, 그것이 아니라
@Entity(name = "Category")로 설정한 엔티티 이름
참고로 name 속성을 생략하면 기본 값으로 클래스 이름을 사용
👌 별칭
- select c from Category c 에서 c라는 별칭을 주었음
- JPQL 에서 엔티티의 별칭은 필수적으로 명시해야 함
- 별칭을 명시하는 AS 키워드는 생략할 수 있음
- JPQL 은 복잡한 검색을 위해 사용되기 때문에 INSERT, UPDATE, DELETE 쿼리는
엔티티 매니저가 직접 호출하도록 하는 것이 좋음