복붙노트

[SPRING] 전체 페이지를 가져 오려면 PageRequest에서 계산 쿼리를 비활성화하는 방법?

SPRING

전체 페이지를 가져 오려면 PageRequest에서 계산 쿼리를 비활성화하는 방법?

우리는 PageRequest와 함께 Spring 데이터를 사용하고 상당히 많은 데이터 집합을 사용합니다. 모든 쿼리는 전체 페이지 수를 얻기 위해 쿼리가 실행되는 것을 제외하고는 최적으로 수행됩니다. 이 기능을 비활성화 할 수있는 방법이 있습니까? 그렇지 않으면 가장 많이 사용하는 Pageable을 구현해야합니까?

http://static.springsource.org/spring-data/data-commons/docs/1.3.2.RELEASE/api/org/springframework/data/domain/PageRequest.html

http://static.springsource.org/spring-data/data-commons/docs/1.3.2.RELEASE/api/org/springframework/data/domain/Pageable.html

편집 : 추가 분석 후 나는이 문제를 해결할 수있는 유일한 방법은 Spring 데이터를 사용하지 않고 EntityManager를 사용하여 반환 할 시작 행 및 레코드 수를 설정할 수 있다고 믿습니다. 다음 페이지를 사용할 수 있을지 여부가 필요하기 때문에 추가 레코드 한 개만 검색합니다. 또한 Spring Data에서는 불가능한 동적 쿼리가 필요합니다.

편집 2 : 그리고 그것은 내가 잠시 동안 일부 응답을 기다리지 않았던 것처럼 보일 것입니다. 고마워요 !!!

해결법

  1. ==============================

    1.이것을 달성하는 방법은 반환 값으로 List를 사용하는 것입니다. 예를 들어 다음과 같이 정의 된 저장소의 경우 :

    이것을 달성하는 방법은 반환 값으로 List를 사용하는 것입니다. 예를 들어 다음과 같이 정의 된 저장소의 경우 :

    interface CustomerRepository extends Repository<Customer, Long> {
    
      List<Customer> findByLastname(String lastname, Pageable pageable);
    }
    

    쿼리 실행 엔진은 Pageable에 의해 전달 된 오프셋 및 페이지 크기를 적용하지만 Page 인스턴스를 생성 할 필요가 없으므로 추가 카운트 쿼리를 트리거하지 않습니다. 이는 또한 참조 문서의 관련 섹션에 문서화되어 있습니다.

  2. from https://stackoverflow.com/questions/12644749/way-to-disable-count-query-from-pagerequest-for-getting-total-pages by cc-by-sa and MIT license