문제

최대 절전 모드에서 페이징을 구현하려면 어떻게해야합니까? 그만큼 Query 객체에는 메소드가 호출됩니다 setMaxResults 그리고 setFirstResult 확실히 도움이됩니다. 그러나 총 결과 수를 어디서 얻을 수 있습니까? 결과의 마지막 페이지에 대한 링크를 표시하고 결과와 같은 것과 같은 것을 200 ~ 250의 인쇄 할 수 있습니다. 트리플 엑스?

도움이 되었습니까?

해결책

query.setmaxresults (int results) 및 query.setfirstresult (int offset)를 사용할 수 있습니다.

편집도 : 얼마나 많은 결과를 얻을 수 있는지 알 수있는 방법이 없습니다. 따라서 먼저 "count (*) ... ..."를 쿼리해야합니다. 조금 못 생겼어, IMHO.

다른 팁

최대 결과를 얻으려면 별도의 쿼리를 수행해야합니다. 기준을 맞추면 그러한 반영을 위해 MAX를 다시 쿼리해야합니다. 나는 보통 이렇게 HQL에서 이것을한다

Integer count = (Integer) session.createQuery("select count(*) from ....").uniqueResult();

~을 위한 Criteria 쿼리 나는 보통 내 데이터를 다음과 같은 dto로 푸시합니다.

ScrollableResults scrollable = criteria.scroll(ScrollMode.SCROLL_INSENSITIVE);
if(scrollable.last()){//returns true if there is a resultset
    genericDTO.setTotalCount(scrollable.getRowNumber() + 1);
    criteria.setFirstResult(command.getStart())
            .setMaxResults(command.getLimit());
    genericDTO.setLineItems(Collections.unmodifiableList(criteria.list()));
}
scrollable.close();
return genericDTO;

카운트 (*) 유형 쿼리의 두 쿼리를 수행 할 수 있습니다. 테이블이 너무 많지 않은 경우 저렴해야합니다. 제한이 설정된 두 번째 쿼리. 그런 다음 얼마나 많은 품목이 존재하는지 알지만 보는 항목 만 가져옵니다.

반환하려는 최대 행 수로 maxResults를 설정할 수 있습니다. 이 값을 사용 가능한 실제 행의 수보다 더 크게 설정하는 데 아무런 해가 없습니다. 다른 솔루션의 문제는 레코드 순서가 쿼리의 각 반복적으로 동일하다고 가정하며 명령간에 변경 사항이 없다는 것입니다.

결과를 실제로 스크롤하려는 경우 스크롤 블러 라이트를 사용하는 것이 가장 좋습니다. 페이징 사이 에이 물체를 버리지 말고 레코드를 동일한 순서로 유지하는 데 사용하십시오. ScrollBeresults의 레코드 수를 찾으려면 마지막 () 위치로 이동 한 다음 행 번호를 얻을 수 있습니다. 행 번호는 0에서 계산을 시작 하므로이 값에 1을 추가해야합니다.

나는 개인적으로 당신이 프론트 엔드에서 페이징을 처리해야한다고 생각합니다. 나는 이것이 효과적인 것이 아니라는 것을 알고 있지만 적어도 그것은 오류가 적다는 것을 알고 있습니다.

카운트 (*)를 사용하는 경우 특정 페이지에 대한 요청 사이의 테이블에서 레코드가 삭제되면 어떻게됩니까? 많은 것들이 이런 식으로 잘못 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top