2013-11-15 4 views
0

다음은 시나리오입니다. 나는 페이지 목록없이 모든 페이지를 볼 수있었습니다 (페이지 매김없이).Java (Named Query)를 사용하여 페이지 매김 구현

이제 백엔드 측면에서 레코드는 각 파트에 대해 2 개의 별도의 명명 된 쿼리 (실제 레코드/파트 1/파트 2의 개수 각각에 대해 하나씩)의 조합으로 검색됩니다.

@NamedQuery(name = "CustomDOTO.findPart1", query = "SELECT part1"; 
@NamedQuery(name = "CustomDOTO.findPart1Count", query = "SELECT count(part1)"; 
@NamedQuery(name = "CustomDOTO.findPart2", query = "SELECT part2"; 
@NamedQuery(name = "CustomDOTO.findPart2Count", query = "SELECT count(part2)"; 

이제 동일한 페이지 매김을 구현해야합니다. 그래서 나는 과 같은 사용자 정의 클래스 PagedResponse를 사용하는데 실제로는 2 가지로 구성됩니다.

private Long totalRecords; 
private List<T> records; 

또한 사용자 지정 메서드 runPaginatedQuery를 사용하여 페이지 매김 된 응답을 반환합니다. 최대의 결과는 각 호출에 증가 할 것이기 때문에 나는이 별도의 명명 된 쿼리를 갖고 있기 때문에 나는 runPaginatedQuery 방법을 명명 된 쿼리의 각 2 회를 ​​호출하는 경우

protected <T> PagedResponse<T> runPaginatedQuery(Query query, Query cntQuery, int startingResult, int maxResults) { 

} 

내 질문은, 그것은 나에게 도움이되지 않습니다. Java 측에서 어떻게 처리합니까? 저에게 알려주세요. 이미 처리 할 수있는 UI가 있습니다.

답변

0

한때 비슷한 문제가있었습니다. 두 개의 쿼리를 사용하지 않고 하나를 사용하고 매개 변수화하여 LIMIT을 사용하고 현재 페이지 번호를 나타내는 변수 하나를 사용하고 한 페이지에 얼마나 많은 결과를 얻을지 정의하는 상수를 사용하십시오.

은 그럼 당신은

LIMIT :offset, :resultsLimit 

처럼 뭔가를해야합니다 그리고 당신은 (page - 1) * DEFAULT_LIMIT_PER_PAGE처럼 뭔가 offset을 설정하고 있으며, resultsLimit 희망

DEFAULT_LIMIT_PER_PAGE하는 데 도움이!

+0

Thx 많이 ... 명명 된 쿼리 자체에서 수정 되었습니까? 아니면 executePaginatedQuery 메서드에 대한 모든 업데이트가 있습니까? – testndtv

+0

몇 가지 이유 때문에 나는 조건부로 호출 되었기 때문에 2 개의 쿼리를 병합 할 수 없다는 것을 알았습니다 ... 어떤 경우에는 1 일 수도 있고, 다른 경우에는 두 개의 쿼리가 호출 될 수도 있습니다 ... – testndtv

+0

그래서 저는 페이지 매김 자바 코드 – testndtv