Loading...

Spring/Blog-V2 / / 2022. 4. 1. 14:24

스프링 59강. JPA 조인 쿼리

반응형

글 상세보기를 하면 유저는 한 개의 데이터만 가져오면 되니까 EAGER 전략을 사용한다.
EAGER 전략을 사용하면 조인해서 데이터를 가져오는데
조인 쿼리가 어떻게 나오는지 살펴보자.


글에 댓글은 없을 수 있지만 유저는 없을 수가 없으니까 INNER 조인으로 가능하다.

 

-- User EAGER, List<Comment> LAZY
SELECT *
FROM post p
INNER JOIN user u ON p.userId = u.id
WHERE p.id = 3;


코멘트는 여러 건 데이터가 있을 수 있어서 LAZY 전략을 사용하니까

나중에 한번 더 SELECT 하게 JPA가 돌아간다.

 

SELECT *
FROM comment
WHERE postId = 3;

 

만약 코멘트가 EAGER 전략을 사용한다면

두 번에 나눠서 SELECT 하지 않고 한 번에 조인해서 가져온다.

 

SELECT *
FROM post p
INNER JOIN user u ON p.userId = u.id
INNER JOIN comment c ON p.id = c.postId
WHERE p.id = 3;

 

1번 글에 4개의 댓글이 있다.

 


이렇게 INNER 조인을 사용하면 중복되는 데이터가 나오는데
JPA가 중복되는 데이터들은 한 건씩만 넣어주고,

4개의 댓글은 List<Comment> 리스트에 넣어준다.

 

엄청 똑똑하다!

 

만약 이 데이터가 글 상세보기가 아닌 게시글 목록보기에 필요하다고 한다면

댓글이 없는 post들은 글 자체가 출력되지 않는다.


INNER JOIN이기 때문이다.


post 목록이 다 나오게 하기 위해서는 LEFT OUTER 조인을 사용한다.
post는 출력되고 대신 댓글이 없기 때문에 null 값이 들어간다.

 

--  User EAGER, List<Comment> EAGER
SELECT *
FROM post p 
INNER JOIN user u ON p.userId = u.id
LEFT OUTER JOIN comment c ON p.id = c.postId;

 

우리 블로그에서는 두 번 SELECT 하는 쿼리를 사용할 것이다.

 

ANSI 표준

 

 

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 
반응형