이전 예제는 정의된 연결을 사용하여 엔터티를 조인합니다. 그러나 때로는 추가 조건을 충족하는 관련 엔터티에만 가입하려고 합니다. JPA 2.1 이후, 당신은 내부 JOI에 대해이 작업을 수행 할 수 있습니다, 추가 ON 문과 함께 JOINs를 떠났다. 공통 속성을 공유한다고 해서 이러한 엔터티 간의 연결을 정의해야 한다는 의미는 아닙니다. 그러나 쿼리별로 조인하려고 합니다. 위의 예에는 @ManyToMany 관계가 있습니다. 한 직원은 많은 작업을 가질 수 있으며 한 작업은 많은 직원에게 할당될 수 있습니다(개인이 아닌 팀에서 수행하는 작업). 다형성 쿼리를 지원하는 상속 전략을 선택하면 쿼리에서 지정된 클래스 및 해당 하위 클래스의 모든 인스턴스를 선택합니다. 이 블로그 게시물의 예제에 있는 모델을 사용하면 책 또는 BlogPost 엔터티인 모든 게시 엔터티를 선택할 수 있습니다. INNER JOI는 이전 예제의 것과 마찬가지로 선택한 엔터티가 조인 조건을 충족하도록 요구합니다. 쿼리는 연결된 Book 엔터티가 있는 작성자 엔터티만 반환했지만 데이터베이스에 Book 엔터티가 포함되지 않은 엔터티는 반환되지 않았습니다. 게시된 책없이 저자를 포함하려면 다음 코드 조각과 같이 LEFT JOIN을 사용해야 합니다. 두 개 이상의 엔터티(예: 모든 작성자 및 작성한 책)에서 데이터를 선택하려면 FROM 절의 엔터티에 참여해야 합니다.
이렇게 하는 가장 쉬운 방법은 다음 코드 조각과 같은 엔터티의 정의된 연결을 사용하는 것입니다. 기준 빌더는 JPA의 일부입니다. 따라서 교차 조인만 수행할 수 있습니다. 먼저 내부 조인부터 시작합니다. 둘 이상의 엔터티가 내부 조인된 경우 조인 조건과 일치하는 레코드만 결과에 수집됩니다. 5.1보다 오래된 JPA 및 최대 절전 모드 버전은 JPQL 쿼리에서 두 엔터티를 조인하기 위해 정의된 관계가 필요합니다. 이로 인해 엔터티 간의 관계 그래프를 통과하는 JOIN 문이 계단식으로 이어지는 경우가 많으며, 엔터티 간에 관계가 없는 경우 엔터티의 JOIN이 JPQL에서 불가능합니다. 여기서는 부서가 있는 모든 직원의 모든 휴대폰을 선택합니다. 다른 내부 조인과 마찬가지로 JPA는 매핑 메타데이터에서 이 정보를 추출하기 때문에 조건을 지정하지 않습니다. JOIN 절은 FROM 절에서도 사용할 수 있습니다. JOIN 절을 사용하면 개체의 모든 관계를 쿼리에 조인하여 WHERE 절에서 사용할 수 있습니다.
JOIN은 FETCH 옵션이 포함되어 있지 않으면 관계가 페지된다는 것을 의미하지는 않습니다. JPQL 쿼리의 관계 특성을 사용하여 관련 엔터티를 조인할 수도 있습니다. 문제는 관계 특성없이 2 엔터티에 가입하려는 즉시 시작됩니다. 5.1 이전의 JPA 및 최대 절전 모드 버전은 이러한 종류의 조인을 지원하지 않으며 암시적 교차 조인을 만들려면 해결 방법을 사용해야 합니다. 이 게시물의 첫 번째 부분에서 이것을 보여주고 게시물의 끝에 새로운 임시 조인 기능을 설명 합니다.