INNER JOIN
을 사용한다. 참고로 INNER
는 생략할 수 있다.
String query = "SELECT m FROM Member m INNER JOIN m.team t WHERE t.name = :teamName";
JPQL 조인의 가장 큰 특징은 연관 필드를 사용한다는 것이다. 여기서 m.team
이 연관 필드인데 연관 필드는 다른 엔티티와 연관관계를 가지기 위해 사용하는 칠드를 말한다.
... FROM Member m JOIN Team t ... // 잘못된 JPQL 조인, 오류 발생
위와 같이 SQL 조인처럼 사용하면 문법 오류가 발생한다. JPQL은 JOIN
명령어 다음에 조인할 객체의 연관 필드를 사용한다.
LEFT OUTER JOIN
을 사용한다. JPA에 RIGHT
는 없다. OUTER
는 생략 가능하여 보통 LEFT JOIN
으로 사용한다.
일대다 관계나 다대다 관계처럼 컬렉션을 사용하는 곳에 조인하는 것을 컬렉션 조인이라 한다.
// 여기서 Team t LEFT JOIN t.members m 부분에 팀과 팀이 보유한 회원 목록을 컬렉션 값 연관 필드로 외부 조인한 것이다.
SELECT t, m FROM Team t LEFT JOIN t.members m
WHERE
절을 사용해서 세타 조인을 할 수 있다. 세타 조인은 내부 조인만 지원한다. 세타 조인을 사용하면 전혀 관계없는 엔티티도 조인할 수 있다. 연관 관계가 없기에 엔티티 명을 정확히 기입해야한다.
SELECT count(m) FROM Member m, Team t WHERE m.username = t.name
JOIN ON
절JPA 2.1부터 조인할 때 ON
절을 지원한다. ON
절을 사용하면 조인 대상을 필터링 하고 조인 할 수 있다. 참고로 내부 조인의 ON
절은 WHERE
절을 사용할 때와 결과가 같으므로 보통 ON
절은 외부 조인에서만 사용한다.
자바 ORM 표준 JPA 프로그래밍 10장