![2번 조회 → 쌤이 추천하는 쿼리 / 한방 쿼리](https://inblog.ai/_next/image?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D2%25EB%25B2%2588%2520%25EC%25A1%25B0%25ED%259A%258C%2520%25E2%2586%2592%2520%25EC%258C%25A4%25EC%259D%25B4%2520%25EC%25B6%2594%25EC%25B2%259C%25ED%2595%2598%25EB%258A%2594%2520%25EC%25BF%25BC%25EB%25A6%25AC%2520%252F%2520%25ED%2595%259C%25EB%25B0%25A9%2520%25EC%25BF%25BC%25EB%25A6%25AC%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3Dcodingb&w=3840&q=75)
[ 게시글 상세 보기 ]
[ default_batch_fetch_size 사용 X ] → 쌤이 쓰는 쿼리
설정에서 디폴트 배치 사이즈 삭제하고 시작!
[ 쿼리문 ]
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F773fa293-205c-4463-9a64-01916c8d58e5%252F6874bba6-7daa-4fad-b3d9-36602c0b8079%252FUntitled.png%3Ftable%3Dblock%26id%3D349a87e2-f424-46ce-a78c-aacae5d77826%26cache%3Dv2&w=3840&q=75)
BoardId가 ? 인 것의 Reply랑 User를 조회하는 쿼리 Reply 엔터티 내의 board 필드(@ManyToOne 관계일 것)를 통해 Board 엔터티와 간접적으로 조건을 맺어 조인한다. Board의 id 값을 조건으로 사용하여, 특정 Board 엔터티에 연관된 Reply 엔터티들을 조회함 -> Reply 엔터티를 기준으로 User 엔터티는 직접 조인하고, Board 엔터티는 조건을 통해 간접적으로 조인
[ BoardService ]
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F773fa293-205c-4463-9a64-01916c8d58e5%252Fa2911008-9b5b-4ff4-a412-9ef774c0608e%252FUntitled.png%3Ftable%3Dblock%26id%3Dcd596937-f7cf-45c0-81b1-28374f1d9b4b%26cache%3Dv2&w=3840&q=75)
보드도 넘기고 REPLY도 넘김 -> 조회 2번
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F773fa293-205c-4463-9a64-01916c8d58e5%252F20f38887-9ec0-4c2e-ad2f-c6af96df7982%252FUntitled.png%3Ftable%3Dblock%26id%3D9db30ea0-2df4-4555-802c-59e5df5ff5d2%26cache%3Dv2&w=3840&q=75)
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](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F773fa293-205c-4463-9a64-01916c8d58e5%252Fbc4481d0-72e4-4e47-8ebb-915dac213de2%252FUntitled.png%3Ftable%3Dblock%26id%3D6d5d013f-e3ff-405d-87cc-da15d3260a71%26cache%3Dv2&w=3840&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F773fa293-205c-4463-9a64-01916c8d58e5%252Fe388b29c-ef0d-4969-a571-abfb413816cd%252FUntitled.png%3Ftable%3Dblock%26id%3Dc1c0b398-170d-4922-8b25-983ce20d9b98%26cache%3Dv2&w=3840&q=75)
[ 쿼리 테스트 결과 ]
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F773fa293-205c-4463-9a64-01916c8d58e5%252Fecc6ca41-ceb5-4970-977a-06c0df0efca5%252FUntitled.png%3Ftable%3Dblock%26id%3D4db15e69-6e4b-45cd-aa82-513afbc791b2%26cache%3Dv2&w=3840&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F773fa293-205c-4463-9a64-01916c8d58e5%252F513d2506-f391-4d41-9b9c-7c1720d9eb76%252FUntitled.png%3Ftable%3Dblock%26id%3D3eeb1cb5-8dd6-4703-8d1a-98b488df20fc%26cache%3Dv2&w=3840&q=75)
Share article