EntityManager.find() 메소드를 사용하면 식별자로 엔티티 하나를 조회할 수 있다.
조회한 엔티티에 객체 그래프 탐색을 이용해 연관된 엔티티들을 찾을 수 있다.
EntityManager.find() - 객체 그래프 탐색 : a.getB().getC()이 기능만으로 애플리케이션을 개발하기는 어렵다.
ORM을 사용하면 DB 테이블이 아닌 엔티티 객체를 대상으로 개발하므로 검색도 테이블이 아닌 엔티티 객체를 대상으로 하는 방법이 필요하다.
JPQL은 이런 문제를 해결하기 위해 만들어졌으며 다음과 같은 특징이 있다.
SQL이 DB 테이블을 대상으로 하는 데이터 중심의 쿼리라면
JPQL은 엔티티 객체를 대상으로 하는 객체지향 쿼리다.
JPQL을 사용하면 JPA는 JPQL을 분석한 다음 적절한 SQL을 만들어 DB를 조회하고 결과로 엔티티 객체를 생성해 반환한다.
JPQL을 한마디로 정의하면 객체지향 SQL이다.
처음 보면 SQL로 오해할 정도로 문법이 비슷하다.
JPQL[Java Persistence Query Language]