JPQL - Paging 문제 상황

Yunny.Log ·2022년 4월 11일
0

Debugging

목록 보기
9/69
post-thumbnail

https://jojoldu.tistory.com/396

  • 다대다로 엮은 테이블의 아이를 데려올 때면 해당 테이블을 join으로만 묶는게 아닌 join(다대다테이블).on(~조건) 으로 걸러야 한다.
private List<ItemSimpleDto> fetchAll(Predicate predicate, Pageable pageable) {


        List<ItemSimpleDto> itemSimpleDtos = getQuerydsl().applyPagination(
                pageable,
                jpaQueryFactory
                        .select(constructor
                                (
                                        ItemSimpleDto.class,
                                        item.id,
                                        item.name,
                                        item.type,
                                        item.itemNumber,

                                        item.width,
                                        item.height,
                                        item.weight,

                                        item.member.username,

                                        itemMaterial.material.name,
                                        //itemMaterial.material.name,

                                        item.color.color,

                                        image.imageaddress,

                                        attachment.attachmentaddress,

                                        item.createdAt

                                        )

                        )
                        .from(item)
                        //.join(itemMaterial).on(item.id.eq(itemMaterial.item.id))

                        .join(itemMaterial).on(item.id.eq(itemMaterial.item.id))
                        //jqpl은 연관관계 없으면 직접 못하고 join on으로 해줘야 함

                        .join(image).on(item.id.eq(image.item.id))

                        .join(attachment).on(
                                item.id.
                                        eq(attachment.item.id).
                                        and(attachment.deleted. //삭제 안된 파일만 보여주기
                                                eq(false))
                        )

                        .join(item.color) //아이템 색깔 조회 위해 Color와 조인
                        .join(item.member) //아이템 작성자 닉네임 조회 위해 Member와 조인

                        .where(predicate)
                        .orderBy(item.id.desc())
        ).fetch(); //리스트 반환

        return itemSimpleDtos;
    }
  • 현재 문제상황 :
    item에 딸린 attachment는 한개 이상이라서 리스트로 받아와지고 싶은데, item 1에 딸린 attachment가 1,2,3 세개 라면
    돌아오는게
    item 1 - attachment 1
    item 1 - attachment 2
    item 1 - attachment 3
  • 이런 식으로 동일한 아이템이 세번이나 반환되는 현상이 일어난다

😥

  • JPQL PAGE로는 딸린 인스턴스를 가져오기 힘든 것 같다고 판단이 되어서 아래 분의 블로그를 참고해서 진행하였다.
    => https://semtax.tistory.com/77

0개의 댓글