🏕️상황
Querydsl을 사용하다 보니 각종 Join이라고 적혀있는 메서드가 많아서 각자 정확히 어떤 기능을 하고, 어떤 상황에 무엇을 사용해야 하는지 궁금해졌다. 그리고 명확히 알아야 할 필요가 있다는 생각이 들었다.
innerJoin() 메서드
- innerJoin은 두 개의 테이블을 내부 조인하는 방식. 내부 조인은 두 테이블 간에 조인 조건을 만족하는 데이터만 결과에 포함시키는 방식입니다. 만약 조인 조건을 만족하지 않는 데이터는 결과에 포함되지 않는다.
- 예를 들어, qBoard와 qHeart 테이블을 innerJoin하여 qBoard의 id 컬럼과 qHeart의 board.id 컬럼이 매칭되는 데이터만 결과로 가져오게 된다.
- innerJoin은 두 테이블 간에 반드시 관계가 존재해야 하며, 매칭되는 데이터만 필요한 경우에 사용된다.
leftJoin() 메서드
- leftJoin은 왼쪽 테이블(첫 번째 테이블)의 모든 데이터를 포함하면서, 오른쪽 테이블(두 번째 테이블)과 조인하여 매칭되는 데이터를 결과로 가져오는 방식.
- 만약 두 번째 테이블과 매칭되는 데이터가 없는 경우에도 왼쪽 테이블의 데이터는 결과에 포함된다.
- 따라서 두 테이블 간에 관계가 필요하지 않고, 왼쪽 테이블의 데이터를 모두 가져오면서 오른쪽 테이블의 데이터와 매칭 여부를 확인해야 할 때 사용한다.
fetchJoin() 메서드
- fetchJoin은 연관 엔티티를 함께 조회하는 방식이다. 일반적으로 JPA에서 연관 엔티티는 지연 로딩으로 설정되어 있어서 해당 엔티티에 접근할 때마다 추가적인 쿼리를 실행하게 된다.
- fetchJoin을 사용하면 연관 엔티티들을 함께 로딩하여 N+1 쿼리 문제를 해결할 수 있다. 즉, 한 번의 쿼리로 모든 필요한 데이터를 가져올 수 있다.
- 예를 들어, qBoard와 연관된 qHeart와 qBoard의 user 엔티티를 함께 로딩하여 쿼리의 효율성을 높이는 데 사용한다.
'개발일지 > 2023_한이음' 카테고리의 다른 글
list null(empty)체크하기 (0) | 2023.08.02 |
---|---|
[Spring boot] s3 이미지 업로드 구현(완성) (0) | 2023.08.01 |
[개발외] 이제부터 완전히 혼자 개발 시작~~ (0) | 2023.07.31 |
@PathVariable, @RequestParam의 차이점 (0) | 2023.07.31 |
🚨ERROR - com.amazonaws.SdkClientException: Failed to connect to service endpoint: (0) | 2023.07.28 |