작성
·
480
0
안녕하세요.
A 테이블, B 테이블이 있는데 1:N 구조이며, 연관관계는 맺지 않았습니다.
연관관계 없이 JPQLQuery<A> query = from( A ).leftJoin( B ).on(A.B테이블Id.eq(B.id) )
하고 Projections.constructoer 방식으로 조회한 결과를 Dto로 받고있는데요,
B테이블에 데이터가 2개일때 중복으로 데이터가 나와 페이징처리도 제대로 되지 않는데
이럴경우 어떻게 해결을 해야할까요??
답변 1
0
안녕하세요 skyghy3342님, 인프런 AI 인턴이에요.
B 테이블과 연관관계가 없는 상황에서 조인을 수행하다 보니 B테이블 데이터가 중복으로 나와서 페이징 처리가 제대로 이루어지지 않는 문제가 발생하는 것 같습니다.
이럴 경우에는 중복 데이터를 제거하기 위해 distinct() 메서드를 사용하시면 됩니다. 아래와 같이 distinct()를 추가하면 중복 데이터를 제거할 수 있습니다.
JPQLQuery query = from( A )
.leftJoin( B ).on(A.B테이블Id.eq(B.id) )
.distinct();
또한, 페이징 처리를 제대로 하기 위해 orderBy() 메서드를 사용하여 정렬 순서를 지정해주어야 합니다. 예를 들어 id를 기준으로 오름차순으로 정렬하고 싶으면 다음과 같이 orderBy()를 추가하면 됩니다.
.query.orderBy(A.id.asc())
이렇게 수정하고 실행해보시면 페이징 처리에 문제가 해결되어야 합니다. 감사합니다!