• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

다대일 관계에서 일을 기준으로 페이징을 하려면 어떻게 해야하나요?

23.03.23 12:34 작성 조회수 445

1

일대다 컬렉션 페치조인과 페이징은 기본적으로 양방향을 전제하고, 을 기준으로 페이징을 하기 때문에 Batch Size 를 이용하는 것은 이해했습니다.

Q. 그렇다면 컬렉션이 생기지 않는 다대일 단방향 매핑 구조에서 을 기준으로 페이징하려면 어떻게 해야할지 궁금합니다.

예를 들어 게시글(1) : 댓글 (N) 이고 댓글 -> 게시글 방향으로 다대일 단방향 매핑이라면, 게시글을 기준으로 페이징하고 싶을 때 어떻게 하면 될까요?

항상 영한님과 서포터님들께 감사드립니닷!!🙇‍♂️

답변 1

답변을 작성해보세요.

0

y2gcoder님의 프로필

y2gcoder

2023.03.25

안녕하세요, manhae 님. 공식 서포터즈 y2gcoder 입니다.

죄송합니다. 혹시 괜찮으시다면 조금 더 요구사항에 대한 부연설명은 부탁드려도 괜찮으시겠습니까?

예를 들어 해당 사이트에서 모든 댓글을 볼 수 있는 화면이 있고, 해당 화면의 정렬을 게시글 ID가 아닌 어떤 특정 칼럼을 기준으로 정렬한 뒤에 페이징하고 싶으시다는 말씀이실까요? 이런 경우라면 사실 정렬할 때만 조인한 게시글이 필요하지 페이징 자체는 원래 댓글만 할 때랑 똑같다고 생각합니다.

위의 예시가 아니라면 부연설명을 해주시면 감사하겠습니다 :)

감사합니다.

ohmyzava님의 프로필

ohmyzava

질문자

2023.03.26

우선 답변 감사드립니다. 제가 생각한 것과는 다소 차이가 있어 구체적으로 예시를 들어보겠습니다.

게시글과 댓글을 한 번에 보여주어야 하는 상황이고, 게시글 id 기준으로 페이징을 해주어야 하는 상황이라고 가정해보겠습니다. 응답 DTO를 아래와 같이 만들고 싶은 상황입니다.

응답 DTO

  • 게시글 1

    • 댓글 1-1

    • 댓글 1-2

  • 게시글 2

    • 댓글 2-1

    • 댓글 2-2

위와 같은 구조에서 우선 게시글 id 만 있어도 페이징이 가능할 것입니다. 이 때, 어떻게 하면 댓글도 같이 가져올 수 있을까요? 게시글에서는 댓글을 참조하고 있지 않으므로( 댓글 N -> 게시글 1 단방향 매핑) 페치조인도 불가능 할 것 같은데.. 방법을 귀띔해주시면 감사하겠습니다!

y2gcoder님의 프로필

y2gcoder

2023.03.26

이런 경우라면 저는

강의에서처럼 제일 먼저 양방향 연관관계를 고려해볼 것 같습니다. 강의에서도 OrderItem과 Order이 다대일 양방향 연관관계임을 알 수 있습니다. 그러면 아마 강의에서처럼 처리해주면 될 것 같습니다.

혹은 성능이 더 필요하다면 그때는 DTO를 조회할 것 같습니다. 보통은 강의에서 나온 연관관계에서 다 해결되는 것 같습니다.