Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

메모장

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

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);
}

'Java' 카테고리의 다른 글

Rest Api 응답  (0) 2022.12.26
Custom Exception 만들기  (0) 2022.12.20
소수점 0 제거  (0) 2022.11.24
JPA @PrePersist, @PreUpdate  (0) 2022.11.22
엑셀 POI  (0) 2022.11.10