prosource

스프링 데이터(JPA)에서 파생된 쿼리에서 여러 속성을 기준으로 정렬하려면 어떻게 해야 합니까?

probook 2023. 3. 19. 18:19
반응형

스프링 데이터(JPA)에서 파생된 쿼리에서 여러 속성을 기준으로 정렬하려면 어떻게 해야 합니까?

이 페이지(https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.statorys)의 메서드 명명 예시를 보고 있는데 다음과 같은 복잡한 체인 메서드 이름을 만들 수 있습니까?

findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc

이 예에서는 1개의 값에 대해서만 OrderBy를 실행하고 있습니다.위의 예에서는ProgDate그리고.StartTime두 개의 개별 값이 됩니다.

요령은 direction 키워드를 사용하여 정렬할 속성을 구분하는 것입니다.Asc그리고.Desc따라서 쿼리 방법에서 원하는 것은 다음과 같습니다.

…OrderByProgDateAscStartTimeAsc

주의: 첫 번째 속성 정의의 결론은 다음과 같습니다.Asc그리고 다음 소유지로 계속 가겠죠.

일반적으로는, 로의 전환을 추천합니다.@Query메서드 이름이 특정 길이 또는 복잡성을 초과하면 기본 쿼리.가장 큰 이유는 고객이 이러한 매우 긴 방법을 부르는 것이 어색하기 때문입니다.와 함께@Query오히려 쿼리 언어의 모든 기능과 쿼리 의도를 표현하기 위해 상위 수준의 언어를 사용할 수 있는 적절한 크기의 메서드 이름을 얻을 수 있습니다.

여러 열에 의해 정렬 작업을 수행하는 get 작업을 구현하기 위한 다른 접근 코드 스니펫을 공유합니다.

        List<Order> orders = new ArrayList<Order>();

        Order StartTimeOrder = new Order(Sort.Direction.DESC, "StartTime");
        orders.add(StartTimeOrder);
        Order progDateOrder = new Order(Sort.Direction.ASC, "ProgDate");
        orders.add(progDateOrder);
        return repository.findAll(Sort.by(orders));

네, 가능합니다.

이것을 시험해 보세요.

findByProgrammeAndDirectorAndProgDateBetweenOrderByProgDateStartTimeAsc(String programme, String director, Date progStart, Date progEnd);

코드를 테스트해 본 적은 없지만, 이미 실행한 것으로 보아 동작하고 있을 것입니다.

조금 더 콤팩트하게:

return repository.findAll(
  Sort.by(List.of(
    new Order(Sort.Direction.DESC, "StartTime"),
    new Order(Sort.Direction.ASC, "ProgDate")
  ))
);

또는

return repository.findAll(
  Sort
  .by(Direction.DESC, "StartTime")
    .and(Sort.by(Sort.Direction.ASC, "ProgDate"))
);

언급URL : https://stackoverflow.com/questions/25380984/how-to-sort-by-multiple-properties-in-spring-data-jpa-derived-queries

반응형