Java

JPA 저장된 정렬 정보 이용하여 리스트 조회

doopang 2022. 12. 7. 16:26

사용자가 리스트의 정렬정보를 저장하여 새로고침 하여도 정렬정보에 의해 리스트 순서가 유지되길 원했다.

Table: Lesson
Column: sortName, sortType

public List<InfoDTO> selectInfoList(Long lessonSeq) {
  return queryFactory
      .select(new QInfoDTO(info.infoSeq, info.name, info.age))
      .from(info)
      .leftJoin(info.lesson, lesson)
      .where(lesson.lessonSeq.eq(lessonSeq),
          info.delDate.isNull(), lesson.delDate.isNull())
      .orderBy(sortInfoList(lessonSeq))
      .fetch();
}

private OrderSpecifier<?> sortInfoList(Long lessonSeq) {
  Lesson lesson = lessonRepository.findById(lessonSeq)
      .orElseThrow(NoSuchElementException::new);

  if (Strings.isBlank(lesson.getSortName()) 
      || Strings.isBlank(lesson.getSortType())) {
    return new OrderSpecifier<>(Order.DESC, info.infoSeq);
  }
  if ("name".equals(lesson.getSortName())) {
    if ("asc".equals(lesson.getSortType())) {
      return new OrderSpecifier<>(Order.ASC, info.name);
    }
    return new OrderSpecifier<>(Order.DESC, info.name);
  }
  if ("age".equals(lesson.getSortName())) {
    if ("asc".equals(lesson.getSortType())) {
      return new OrderSpecifier<>(Order.ASC, info.age);
    }
    return new OrderSpecifier<>(Order.DESC, info.age);
  }
  if ("seq".equals(lesson.getSortName())) {
    if ("asc".equals(lesson.getSortType())) {
      return new OrderSpecifier<>(Order.ASC, info.infoSeq);
    }
    return new OrderSpecifier<>(Order.DESC, info.infoSeq);
  }
  return new OrderSpecifier<>(Order.DESC, info.infoSeq);
}