.(점)을 찍어 객체 그래프를 탐색하는 것
단순히 값을 저장하기 위한 필드이다. 경로 탐색의 끝이기 때문에 더이상 탐색할 수 없다.
묵시적 내부 조인 발생하며, 탐색이 가능하다. 튜닝을 하면서 어려움을 겪을 수 있기 때문에 묵시적 JOIN
보다는 명식적으로 조인해야 한다.
묵시적 내부 조인 발생하며 탐색할 수 없다. FROM
에서 명시적 조인을 통해서 별칭을 얻으면 별칭을 통해서 탐색 가능하다.
명시적 조인
: join 키워드 직접 사용한다.
묵시적 조인
: 경로 표현식에 의해 묵시적으로 SQL 조인이 발생한다.
영한님
: 묵시적 조인은 조인이 일어나는 상황을 파악하기 어렵기 때문에 실무에서는 명시적 조인을 사용해야 한다. (JPA를 잘 하는 분들은 튜닝으로 문제를 해결할 수 있지만..)
페치 조인은 SQL의 조인의 종류는 아니고, JPQL에서 성능 최적화를 위해 제공하는 기능이다. 연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능이다.
JPQL은 결과를 반환할 때 연관관계를 고려하지 않는다. 단지 SELECT 절에 지정한 엔티티만 조회할 뿐이다.
DISTINCT
: 데이터베이스에 DISTINCT를 추가하는 것은 물론이고 애플리케이션에서 한 번 더 중복을 제거한다.
페치 조인을 사용하면 SQL 한 번으로 연관된 엔티티들을 조회할 수 있어서 SQL 호출 횟수를 줄여 성능을 최적화할 수 있다. 최적화를 위해서 글로벌 로딩 전략을 지연로딩으로 하고 필요에 따라 페치 조인을 적용하는 것이 좋다.
(엔티티에 직접 적용하는 전략을 글로벌 로딩 전략이라 부른다.)
쿼리에 이름을 부여해서 사용하는 방법이다.
Named 쿼리는 애플리케이션 로딩 시점에 JPQL 문법을 체크하고 미리 파싱한다. 따라서 오류를 빨리 확인할 수 있고, 파싱된 결과를 재사용하므로 성능 최적화에 도움을 준다.