2번 조회 → 쌤이 추천하는 쿼리 / 한방 쿼리

coding S's avatar
Mar 24, 2024
2번 조회 → 쌤이 추천하는 쿼리 / 한방 쿼리

[ 게시글 상세 보기 ]

[ default_batch_fetch_size 사용 X ] → 쌤이 쓰는 쿼리

💡
설정에서 디폴트 배치 사이즈 삭제하고 시작!
 

[ 쿼리문 ]

notion image
BoardId가 ? 인 것의 Reply랑 User를 조회하는 쿼리 Reply 엔터티 내의 board 필드(@ManyToOne 관계일 것)를 통해 Board 엔터티와 간접적으로 조건을 맺어 조인한다. Board의 id 값을 조건으로 사용하여, 특정 Board 엔터티에 연관된 Reply 엔터티들을 조회함 -> Reply 엔터티를 기준으로 User 엔터티는 직접 조인하고, Board 엔터티는 조건을 통해 간접적으로 조인

[ BoardService ]

notion image
보드도 넘기고 REPLY도 넘김 -> 조회 2번
notion image
Board 엔티티가 들고있는 getReply를 안 쓰고 한 번 더 조회해서 넣는 것 내가 조회한 reply니까 레이지 로딩이 없다. (= 이 reply는 이미 user를 조인했으니 레이지 로딩 없음) 쿼리는 Board-User 조인, Reply-User 조인 된 쿼리가 나온다 이렇게 끝!
💡
DTO를 만드는 과정에서 필요한 모든 데이터를 미리 불러와서 담아두기 때문에, DTO를 사용자에게 보낸 후에는 레이지 로딩이 일어날 일이 없다!
 

[ 쿼리문 확인 ]

자료 필요
 

[ 한방 쿼리 버전 ]

@Query("select b from Board b join fetch b.user left join fetch b.replies r join fetch r.user ru where b.id = :id") Board findDetail(@Param("id") int id);
notion image

notion image

[ 쿼리 테스트 결과 ]

notion image
notion image
 

Share article

codingb