인프런 커뮤니티 질문&답변

정윤성님의 프로필 이미지
정윤성

작성한 질문수

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

Spring Data JPA에서 Page쿼리 작성도중 page의 size가 의도된 수넘어가면 타입에러가뜹니다 ㅠㅠ

작성

·

522

0

실제 Comment도메인와 Query부분 로직입니다

문제는 Pageable의 size가 10이라고쳤을때 entity의 개수가 10개미만일경우는 에러가 발생하지않지만 딱 size개수 혹은 그이상이 될경우 페이지가 분리가 되지않고

위와같은 타입변환에러가 출력되었습니다 ( pageable의 size를 늘려줄경우 잘 작동합니다 페이지가 분리만 안되는거같아요 )

이유를 잘모르겠어서 querydsl 로도 똑같이 작성해봤는데

이는 잘 작동하였습니다 혹시 이부분에 대해서 아시는게 있는지 여쭈어 보고싶습니다 ㅠㅠ

정리 : Spring Data JPA에서 entity의 개수가 size를 넘어갈경우 페이지가 넘어가지지않고 타입변환에러가 발생 ! ( 이전에는 공부할때 이런경험이 없었습니다 )

* 그리고 페치조인이아니라 일반 join을 할경우 entity의 기본생성자가 private타입이면 안되는건가요 ??

답변 2

1

정윤성님의 프로필 이미지
정윤성
질문자

오 감사합니다 선생님

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 윤성님^^

countQuery가 잘못 작성되었습니다. countQuery를

select c from Comment... -> select count(c) from Comment ... 으로 변경하시면 정상 동작할꺼에요^^

추가로 스프링 데이터 JPA에서 10개 미만인 경우에 잘 동작했던 이유는 스프링 데이터 JPA에서 한페이지 이하인 경우에는 사실 count 쿼리 자체를 조회할 필요가 없기 때문에(한페이지 밖에 없다는 것을 알고 있으므로) 최적화 로직이 동작하고, 해당 카운트 확인 호출하지 않아서 문제가 발생하지 않았습니다.

QueryDSL에서 문제가 발생하지 않았던 이유는 QueryDSL이 내부에서 fetchCount select(comment) 라고 하면 fetchCount가 조회용 쿼리를 만들 때 select 부분을 엔티티 대신에 count 쿼리로 변경합니다.

감사합니다.

정윤성님의 프로필 이미지
정윤성

작성한 질문수

질문하기