Why Pageable return last as true alway, even if that was not the last page

137 Views Asked by At

I have used pagination in my criteria builder query and alway get "last": true,

get URL

{{MaterialBaseURI}}/materials/pagination?confType={{confType}}&pageNumber=0&pageSize=5&title=link

My pagination code:

Optional<Pageable> optionalPageable = pageNumber.map(integer -> PageRequest.of(integer, pageSize.get(), Sort.by(Sort.Order.asc(TITLE))));

Page<MaterialMetadata> materialMetadata = materialRepository.findAll((Specification<MaterialMetadata>) (root, criteriaQuery, criteriaBuilder) -> {
            Predicate predicate = criteriaBuilder.conjunction();
            predicate = criteriaBuilder.and(predicate, criteriaBuilder.equal(root.get("conferenceType"), com.logmein.gotomaterialservice.entity.enums.ConferenceType.valueOf(String.valueOf(conferenceType))));

            if (!StringUtils.isEmpty(title)) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.like(root.get("title"), "%" + title + "%"));}

            if (startDateTime != null && endDateTime != null && startDateTime != 0 && endDateTime != 0) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.between(root.get("createdTime"), startDateTime, endDateTime));}
            else if (startDateTime != null && startDateTime != 0) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.greaterThanOrEqualTo(root.get("createdTime"), startDateTime));}
            else if (endDateTime != null && endDateTime != 0) {
                predicate = criteriaBuilder.and(predicate, criteriaBuilder.lessThanOrEqualTo(root.get("createdTime"), endDateTime));
            }
            return predicate;
        }, optionalPageable.get());

output:

{
    "content": [
         ...
    ],
    "pageable": {
        "sort": {
            "empty": false,
            "unsorted": false,
            "sorted": true
        },
        "offset": 0,
        "pageNumber": 0,
        "pageSize": 5,
        "paged": true,
        "unpaged": false
    },
    "totalPages": 1,
    "totalElements": 5,
    "last": true,
    "size": 5,
    "number": 0,
    "sort": {
        "empty": false,
        "unsorted": false,
        "sorted": true
    },
    "numberOfElements": 5,
    "first": true,
    "empty": false
}

it has total 15 records, if we give page size =5 even though last= true, in ideal scenario it should be false

I do not know What I have missed here.

0

There are 0 best solutions below