private Slice executeSliceQuery(Object[] parameters) { EntityQuery.Builder builder = StructuredQuery.newEntityQueryBuilder() .setKind(this.datastorePersistentEntity.kindName()); StructuredQuery query = applyQueryBody(parameters, builder, false); List items = this.datastoreTemplate.query((query), (x) -> x); Integer limit = (query.getLimit() == null) ? null : query.getLimit() - 1; boolean exceedsLimit = false; if (limit != null) { //for slice queries we retrieve one additional item to check if the next slice exists //the additional item will not be converted on read exceedsLimit = items.size() > limit; if (exceedsLimit) { items = items.subList(0, limit); } } ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(), parameters); Pageable pageable = paramAccessor.getPageable(); List entities = (List) this.datastoreTemplate .convertEntitiesForRead(items.iterator(), this.entityType).stream() .map((o) -> this.processRawObjectForProjection((T) o)).collect(Collectors.toList()); return new SliceImpl(entities, pageable, exceedsLimit); }
private Slice executeSliceQuery(Object[] parameters) { EntityQuery.Builder builder = StructuredQuery.newEntityQueryBuilder() .setKind(this.datastorePersistentEntity.kindName()); StructuredQuery query = applyQueryBody(parameters, builder, false); List items = this.datastoreTemplate.query((query), (x) -> x); Integer limit = (query.getLimit() == null) ? null : query.getLimit() - 1; boolean exceedsLimit = false; if (limit != null) { //for slice queries we retrieve one additional item to check if the next slice exists //the additional item will not be converted on read exceedsLimit = items.size() > limit; if (exceedsLimit) { items = items.subList(0, limit); } } ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(), parameters); Pageable pageable = paramAccessor.getPageable(); List entities = (List) this.datastoreTemplate .convertEntitiesForRead(items.iterator(), this.entityType).stream() .map((o) -> this.processRawObjectForProjection((T) o)).collect(Collectors.toList()); return new SliceImpl(entities, pageable, exceedsLimit); }