JPQL 조인

Gunjoo Ahn·2023년 8월 24일
0
post-custom-banner

내부 조인

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 절은 외부 조인에서만 사용한다.

Reference

자바 ORM 표준 JPA 프로그래밍 10장

profile
Backend Developer
post-custom-banner

0개의 댓글