
[ 게시글 상세 보기 ]
[ default_batch_fetch_size 사용 X ] → 쌤이 쓰는 쿼리
설정에서 디폴트 배치 사이즈 삭제하고 시작!
[ 쿼리문 ]

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

보드도 넘기고 REPLY도 넘김 -> 조회 2번

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);


[ 쿼리 테스트 결과 ]


Share article