org.springframework.data.domain.SliceImpl#org.springframework.data.repository.query.ParametersParameterAccessor源码实例Demo

下面列出了org.springframework.data.domain.SliceImpl#org.springframework.data.repository.query.ParametersParameterAccessor 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: spring-cloud-gcp   文件: PartTreeDatastoreQuery.java
private Slice executeSliceQuery(Object[] parameters) {
	StructuredQuery.Builder builder = getEntityOrProjectionQueryBuilder()
			.setKind(this.datastorePersistentEntity.kindName());
	StructuredQuery query = applyQueryBody(parameters, builder, false, false, null);
	DatastoreResultsIterable<?> resultList = this.datastoreOperations.queryKeysOrEntities(query, this.entityType);

	ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(), parameters);

	Pageable pageable = DatastorePageable.from(paramAccessor.getPageable(), resultList.getCursor(), null);

	EntityQuery.Builder builderNext = newEntityQueryBuilder().setKind(this.datastorePersistentEntity.kindName());
	StructuredQuery queryNext = applyQueryBody(parameters, builderNext, false, true, resultList.getCursor());
	Iterable nextResult = this.datastoreOperations.query(queryNext, x -> x);

	List<Object> result =
					StreamSupport.stream(resultList.spliterator(), false).collect(Collectors.toList());

	return (Slice) this.processRawObjectForProjection(
			new SliceImpl(result, pageable, nextResult.iterator().hasNext()));
}
 
源代码2 项目: spring-cloud-gcp   文件: SqlSpannerQuery.java
@Override
public List executeRawResult(Object[] parameters) {

	ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(), parameters);
	Object[] params = StreamSupport.stream(paramAccessor.spliterator(), false).toArray();

	QueryTagValue queryTagValue = new QueryTagValue(getParamTags(), parameters,
					params, resolveEntityClassNames(this.sql, this.spannerMappingContext));

	resolveSpELTags(queryTagValue);

	return this.isDml
			? Collections.singletonList(
					this.spannerTemplate.executeDmlStatement(buildStatementFromQueryAndTags(queryTagValue)))
			: executeReadSql(paramAccessor.getPageable(), paramAccessor.getSort(), queryTagValue);
}
 
源代码3 项目: spring-cloud-gcp   文件: PartTreeSpannerQuery.java
@Override
protected List executeRawResult(Object[] parameters) {
	ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(),
			parameters);
	if (isCountOrExistsQuery()) {
		return SpannerStatementQueryExecutor.executeQuery(
				(struct) -> isCountQuery() ? struct.getLong(0) : struct.getBoolean(0),
				this.entityType, this.tree, paramAccessor, getQueryMethod().getMethod().getParameters(),
				this.spannerTemplate,
				this.spannerMappingContext);
	}
	if (this.tree.isDelete()) {
		return this.spannerTemplate
				.performReadWriteTransaction(getDeleteFunction(parameters));
	}
	return SpannerStatementQueryExecutor.executeQuery(this.entityType, this.tree,
			paramAccessor, getQueryMethod().getMethod().getParameters(), this.spannerTemplate,
			this.spannerMappingContext);
}
 
源代码4 项目: spring-cloud-gcp   文件: PartTreeSpannerQuery.java
private Function<SpannerTemplate, List> getDeleteFunction(Object[] parameters) {
	return (transactionTemplate) -> {
		ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(),
				parameters);
		List<T> entitiesToDelete = SpannerStatementQueryExecutor
				.executeQuery(this.entityType, this.tree, paramAccessor, getQueryMethod().getMethod().getParameters(),
						transactionTemplate, this.spannerMappingContext);
		transactionTemplate.deleteAll(entitiesToDelete);

		List result = null;
		if (this.queryMethod.isCollectionQuery()) {
			result = entitiesToDelete;
		}
		else if (this.queryMethod.getReturnedObjectType() != void.class) {
			result = Collections.singletonList(entitiesToDelete.size());
		}
		return result;
	};
}
 
@Override
protected Query doCreateQuery(Object[] values) {
    String nativeQuery = getQuery(values);
    JpaParameters parameters = getQueryMethod().getParameters();
    ParameterAccessor accessor = new ParametersParameterAccessor(parameters, values);
    String sortedQueryString = QueryUtils
            .applySorting(nativeQuery, accessor.getSort(), QueryUtils.detectAlias(nativeQuery));
    Query query = bind(createJpaQuery(sortedQueryString), values);
    if (parameters.hasPageableParameter()) {
        Pageable pageable = (Pageable) (values[parameters.getPageableIndex()]);
        if (pageable != null) {
            query.setFirstResult((int) pageable.getOffset());
            query.setMaxResults(pageable.getPageSize());
        }
    }
    return query;
}
 
private KeyValueQuery<SpelExpression> createQueryForMethodWithArgs(String methodName, Object... args)
		throws NoSuchMethodException, SecurityException {

	Class<?>[] argTypes = new Class<?>[args.length];
	if (!ObjectUtils.isEmpty(args)) {

		for (int i = 0; i < args.length; i++) {
			argTypes[i] = args[i].getClass();
		}
	}

	Method method = PersonRepository.class.getMethod(methodName, argTypes);
	doReturn(Person.class).when(metadataMock).getReturnedDomainClass(method);

	PartTree partTree = new PartTree(method.getName(), method.getReturnType());
	SpelQueryCreator creator = new SpelQueryCreator(partTree, new ParametersParameterAccessor(
			new QueryMethod(method, metadataMock, new SpelAwareProxyProjectionFactory()).getParameters(), args));

	KeyValueQuery<SpelExpression> q = creator.createQuery();
	q.getCriteria().setEvaluationContext(
			SimpleEvaluationContext.forReadOnlyDataBinding().withRootObject(args).withInstanceMethods().build());

	return q;
}
 
private static SpelCriteria createQueryForMethodWithArgs(String methodName, Object... args) throws Exception {

		List<Class<?>> types = new ArrayList<>(args.length);

		for (Object arg : args) {
			types.add(arg.getClass());
		}

		Method method = PersonRepository.class.getMethod(methodName, types.toArray(new Class<?>[types.size()]));
		RepositoryMetadata metadata = mock(RepositoryMetadata.class);
		doReturn(method.getReturnType()).when(metadata).getReturnedDomainClass(method);

		PartTree partTree = new PartTree(method.getName(), method.getReturnType());
		SpelQueryCreator creator = new SpelQueryCreator(partTree, new ParametersParameterAccessor(
				new QueryMethod(method, metadata, new SpelAwareProxyProjectionFactory()).getParameters(), args));

		return new SpelCriteria(creator.createQuery().getCriteria(),
				SimpleEvaluationContext.forReadOnlyDataBinding().withInstanceMethods().withRootObject(args).build());
	}
 
源代码8 项目: sdn-rx   文件: CypherQueryCreator.java
CypherQueryCreator(Neo4jMappingContext mappingContext, Class<?> domainType, Neo4jQueryType queryType,
	PartTree tree,
	ParametersParameterAccessor actualParameters,
	List<String> includedProperties,
	Function<Object, Object> parameterConversion
) {
	super(tree, actualParameters);
	this.mappingContext = mappingContext;

	this.domainType = domainType;
	this.nodeDescription = this.mappingContext.getRequiredNodeDescription(this.domainType);

	this.queryType = queryType;

	this.formalParameters = actualParameters.getParameters().iterator();
	this.maxResults = tree.isLimiting() ? tree.getMaxResults() : null;

	this.includedProperties = includedProperties;
	this.parameterConversion = parameterConversion;

	this.pagingParameter = actualParameters.getPageable();

	AtomicInteger symbolicNameIndex = new AtomicInteger();

	propertyPathWrappers = tree.getParts().stream()
		.map(part ->
			new PropertyPathWrapper(symbolicNameIndex.getAndIncrement(),
				mappingContext.getPersistentPropertyPath(part.getProperty())))
		.collect(toList());

}
 
源代码9 项目: spring-cloud-gcp   文件: GqlDatastoreQuery.java
private Object buildPageOrSlice(Object[] parameters, ParsedQueryWithTagsAndValues parsedQueryWithTagsAndValues,
		DatastoreResultsIterable found) {
	Pageable pageableParam =
			new ParametersParameterAccessor(getQueryMethod().getParameters(), parameters).getPageable();
	List resultsList = found == null ? Collections.emptyList()
			: (List) StreamSupport.stream(found.spliterator(), false).collect(Collectors.toList());

	Cursor cursor = found != null ? found.getCursor() : null;
	Slice result = isPageQuery()
			? buildPage(pageableParam, parsedQueryWithTagsAndValues, cursor, resultsList)
			: buildSlice(pageableParam, parsedQueryWithTagsAndValues, cursor, resultsList);
	return processRawObjectForProjection(result);
}
 
源代码10 项目: spring-cloud-gcp   文件: PartTreeFirestoreQuery.java
@Override
public Object execute(Object[] parameters) {
	StructuredQuery.Builder builder = createBuilderWithFilter(parameters);

	// Handle Pageable parameters.
	if (!getQueryMethod().getParameters().isEmpty()) {
		ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(),
				parameters);
		Pageable pageable = paramAccessor.getPageable();
		if (pageable != null && pageable.isPaged()) {
			builder.setOffset((int) Math.min(Integer.MAX_VALUE, pageable.getOffset()));
			builder.setLimit(Int32Value.newBuilder().setValue(pageable.getPageSize()));
		}

		Sort sort = paramAccessor.getSort();
		if (sort != null) {
			builder.addAllOrderBy(createFirestoreSortOrders(sort));
		}
	}

	if (this.tree.isCountProjection()) {
		return this.reactiveOperations.count(this.persistentEntity.getType(), builder);
	}
	else {
		return this.reactiveOperations.execute(builder, this.persistentEntity.getType());
	}
}
 
源代码11 项目: spring-data-ebean   文件: PartTreeEbeanQuery.java
/**
 * Creates a new {@link Query} for the given parameter values.
 *
 * @param values
 * @return
 */
public EbeanQueryWrapper createQuery(Object[] values) {
    ParametersParameterAccessor accessor = new ParametersParameterAccessor(parameters, values);
    EbeanQueryCreator ebeanQueryCreator = createCreator(accessor);
    return
            restrictMaxResultsIfNecessary(
                    invokeBinding(getBinder(values),
                            EbeanQueryWrapper.ofEbeanQuery(ebeanQueryCreator.createQuery())));
}
 
源代码12 项目: spring-data-ebean   文件: PartTreeEbeanQuery.java
protected EbeanQueryCreator createCreator(ParametersParameterAccessor accessor) {
    EbeanServer ebeanServer = getEbeanServer();
    Query ebeanQuery = ebeanServer.createQuery(domainClass);
    ExpressionList expressionList = ebeanQuery.where();

    ParameterMetadataProvider provider = new ParameterMetadataProvider(accessor);

    ResultProcessor processor = getQueryMethod().getResultProcessor();

    return new EbeanQueryCreator(tree, processor.getReturnedType(), expressionList, provider);
}
 
@Override
@SuppressWarnings("unchecked")
protected Object doExecute(AbstractEbeanQuery query, Object[] values) {
    ParametersParameterAccessor accessor = new ParametersParameterAccessor(parameters, values);
    EbeanQueryWrapper createQuery = query.createQuery(values);
    return createQuery.findSlice(accessor.getPageable());
}
 
@Override
@SuppressWarnings("unchecked")
protected Object doExecute(final AbstractEbeanQuery repositoryQuery, final Object[] values) {
    ParameterAccessor accessor = new ParametersParameterAccessor(parameters, values);
    EbeanQueryWrapper createQuery = repositoryQuery.createQuery(values);
    return createQuery.findPage(accessor.getPageable());
}
 
源代码15 项目: spring-vault   文件: VaultQueryCreatorUnitTests.java
VaultQuery createQuery(String methodName, String value) {

		DefaultParameters defaultParameters = new DefaultParameters(
				ReflectionUtils.findMethod(dummy.class, "someUnrelatedMethod", String.class));

		PartTree partTree = new PartTree(methodName, Credentials.class);
		VaultQueryCreator queryCreator = new VaultQueryCreator(partTree,
				new ParametersParameterAccessor(defaultParameters, new Object[] { value }), this.mappingContext);

		return queryCreator.createQuery().getCriteria();
	}
 
源代码16 项目: spring-vault   文件: VaultQueryCreatorUnitTests.java
VaultQuery createQuery(String methodName, List<String> value) {

		DefaultParameters defaultParameters = new DefaultParameters(
				ReflectionUtils.findMethod(dummy.class, "someUnrelatedMethod", List.class));

		PartTree partTree = new PartTree(methodName, Credentials.class);
		VaultQueryCreator queryCreator = new VaultQueryCreator(partTree,
				new ParametersParameterAccessor(defaultParameters, new Object[] { value }), this.mappingContext);

		return queryCreator.createQuery().getCriteria();
	}
 
源代码17 项目: spring-vault   文件: VaultQueryCreatorUnitTests.java
VaultQuery createQuery(String methodName, String value, String anotherValue) {

		DefaultParameters defaultParameters = new DefaultParameters(
				ReflectionUtils.findMethod(dummy.class, "someUnrelatedMethod", String.class, String.class));

		PartTree partTree = new PartTree(methodName, Credentials.class);
		VaultQueryCreator queryCreator = new VaultQueryCreator(partTree,
				new ParametersParameterAccessor(defaultParameters, new Object[] { value, anotherValue }),
				this.mappingContext);

		return queryCreator.createQuery().getCriteria();
	}
 
源代码18 项目: spring-data-mybatis   文件: AbstractMybatisQuery.java
@Nullable
private Object doExecute(MybatisQueryExecution execution, Object[] values) {

	Object result = execution.execute(this, values);

	ParametersParameterAccessor accessor = new ParametersParameterAccessor(
			method.getParameters(), values);
	ResultProcessor withDynamicProjection = method.getResultProcessor()
			.withDynamicProjection(accessor);

	return withDynamicProjection.processResult(result,
			new TupleConverter(withDynamicProjection.getReturnedType()));
}
 
@Override
public Object execute(Object[] parameters) {

	ParameterAccessor accessor = new ParametersParameterAccessor(getQueryMethod().getParameters(), parameters);
	KeyValueQuery<?> query = prepareQuery(parameters);
	ResultProcessor processor = queryMethod.getResultProcessor().withDynamicProjection(accessor);

	return processor.processResult(doExecute(parameters, query));
}
 
@SuppressWarnings({ "rawtypes", "unchecked" })
protected KeyValueQuery<?> prepareQuery(KeyValueQuery<?> instance, Object[] parameters) {

	ParametersParameterAccessor accessor = new ParametersParameterAccessor(getQueryMethod().getParameters(),
			parameters);

	Object criteria = instance.getCriteria();

	if (criteria instanceof SpelCriteria || criteria instanceof SpelExpression) {

		SpelExpression spelExpression = getSpelExpression(criteria);
		EvaluationContext context = this.evaluationContextProvider.getEvaluationContext(getQueryMethod().getParameters(),
				parameters);
		criteria = new SpelCriteria(spelExpression, context);
	}

	KeyValueQuery<?> query = new KeyValueQuery(criteria);
	Pageable pageable = accessor.getPageable();
	Sort sort = accessor.getSort();

	query.setOffset(pageable.toOptional().map(Pageable::getOffset).orElse(-1L));

	if (pageable.isPaged()) {
		query.setRows(pageable.getPageSize());
	} else if (instance.getRows() >= 0) {
		query.setRows(instance.getRows());
	}

	query.setSort(sort.isUnsorted() ? instance.getSort() : sort);

	return query;
}
 
@Override
public Query<T> doCreateQuery(Object[] values) {

	ParametersParameterAccessor accessor = new ParametersParameterAccessor(parameters, values);
	DynamoDBQueryCreator<T, ID> queryCreator = createQueryCreator(accessor);
	return queryCreator.createQuery();

}
 
@Override
public Query<Long> doCreateCountQuery(Object[] values,boolean pageQuery) {

	ParametersParameterAccessor accessor = new ParametersParameterAccessor(parameters, values);
	DynamoDBCountQueryCreator<T, ID> queryCreator = createCountQueryCreator(accessor,pageQuery);
	return queryCreator.createQuery();

}
 
@Override
public Object execute(AbstractDynamoDBQuery<T, ID> dynamoDBQuery, Object[] values) {

	ParameterAccessor accessor = new ParametersParameterAccessor(parameters, values);
	Pageable pageable = accessor.getPageable();
	Query<T> query = dynamoDBQuery.doCreateQueryWithPermissions(values);

	List<T> results = query.getResultList();
	return createPage(results, pageable,dynamoDBQuery,values);
}
 
@Override
public Object execute(AbstractDynamoDBQuery<T, ID> dynamoDBQuery, Object[] values) {

	ParameterAccessor accessor = new ParametersParameterAccessor(parameters, values);
	Pageable pageable = accessor.getPageable();
	Query<T> query = dynamoDBQuery.doCreateQueryWithPermissions(values);
	List<T> results = query.getResultList();
	return createSlice(results, pageable);
}
 
源代码25 项目: dubbox   文件: SolrParametersParameterAccessor.java
public SolrParametersParameterAccessor(SolrQueryMethod solrQueryMethod, Object[] values) {
	this.parameters = solrQueryMethod.getParameters();
	this.parametersParameterAccessorDelegate = new ParametersParameterAccessor(this.parameters, values.clone());
}
 
源代码26 项目: spring-cloud-gcp   文件: PartTreeDatastoreQuery.java
@Override
public Object execute(Object[] parameters) {
	Class<?> returnedObjectType = getQueryMethod().getReturnedObjectType();
	if (isPageQuery()) {
		ExecutionResult executionResult = (ExecutionResult) runQuery(parameters, returnedObjectType, List.class,
				false);

		List<?> resultEntries = (List) executionResult.getPayload();

		ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(),
				parameters);

		Pageable pageableParam = paramAccessor.getPageable();

		Long totalCount;
		if (pageableParam instanceof DatastorePageable) {
			Long previousCount = ((DatastorePageable) pageableParam).getTotalCount();
			Assert.notNull(previousCount, "Previous total count can not be null.");

			totalCount = ((DatastorePageable) pageableParam).getTotalCount();
		}
		else {
			totalCount = (Long) runQuery(parameters, Long.class, null, true);
		}

		Pageable pageable = DatastorePageable.from(pageableParam, executionResult.getCursor(), totalCount);

		return new PageImpl<>(resultEntries, pageable, totalCount);
	}

	if (isSliceQuery()) {
		return executeSliceQuery(parameters);
	}

	Object result = runQuery(parameters, returnedObjectType,
			((DatastoreQueryMethod) getQueryMethod()).getCollectionReturnType(), false);

	result = result instanceof PartTreeDatastoreQuery.ExecutionResult ? ((ExecutionResult) result).getPayload()
			: result;
	if (result == null && ((DatastoreQueryMethod) getQueryMethod()).isOptionalReturnType()) {
		return Optional.empty();
	}
	return result;
}
 
源代码27 项目: spring-cloud-gcp   文件: PartTreeDatastoreQuery.java
private StructuredQuery applyQueryBody(Object[] parameters,
		Builder builder, boolean total, boolean singularResult, Cursor cursor) {
	ParameterAccessor paramAccessor = new ParametersParameterAccessor(getQueryMethod().getParameters(), parameters);
	if (this.tree.hasPredicate()) {
		applySelectWithFilter(parameters, builder);
	}

	Pageable pageable = paramAccessor.getPageable();
	Integer limit = null;
	Integer offset = null;
	if (singularResult || this.tree.isExistsProjection()) {
		limit = 1;
	}
	else if (this.tree.isLimiting()) {
		limit = this.tree.getMaxResults();
	}

	if (!singularResult && !total && pageable.isPaged()) {
		limit = pageable.getPageSize();
	}

	Sort sort = this.tree.getSort();
	if (getQueryMethod().getParameters().hasPageableParameter()) {
		sort = sort.and(pageable.getSort());
	}
	if (getQueryMethod().getParameters().hasSortParameter()) {
		sort = sort.and(paramAccessor.getSort());
	}

	if (pageable.isPaged() && !total) {
		offset = (int) pageable.getOffset();
	}

	Cursor cursorToApply = null;
	if (cursor != null) {
		cursorToApply = cursor;
	}
	else if (pageable instanceof DatastorePageable) {
		cursorToApply = ((DatastorePageable) pageable).toCursor();
	}
	DatastoreTemplate.applyQueryOptions(
			builder, new DatastoreQueryOptions.Builder().setLimit(limit).setOffset(offset).setSort(sort)
					.setCursor(cursorToApply).build(),
			this.datastorePersistentEntity);
	return builder.build();
}
 
源代码28 项目: spring-cloud-gcp   文件: GqlDatastoreQuery.java
ParsedQueryWithTagsAndValues(List<String> initialTags, Object[] rawParams) {
	this.params = Arrays.stream(rawParams).filter(e -> !(e instanceof Pageable || e instanceof Sort))
			.collect(Collectors.toList());
	this.rawParams = rawParams;
	this.tagsOrdered = new ArrayList<>(initialTags);

	SpelEvaluator spelEvaluator = GqlDatastoreQuery.this.evaluatingSpelQueryContext.parse(
			GqlDatastoreQuery.this.gqlResolvedEntityClassName,
			GqlDatastoreQuery.this.queryMethod.getParameters());
	Map<String, Object> results = spelEvaluator.evaluate(this.rawParams);
	this.finalGql = spelEvaluator.getQueryString();

	for (Map.Entry<String, Object> entry : results.entrySet()) {
		this.params.add(entry.getValue());
		// Cloud Datastore requires the tag name without the @
		this.tagsOrdered.add(entry.getKey().substring(1));
	}

	ParameterAccessor paramAccessor =
			new ParametersParameterAccessor(getQueryMethod().getParameters(), rawParams);
	Sort sort = paramAccessor.getSort();

	this.finalGql = addSort(this.finalGql, sort);

	this.noLimitQuery = this.finalGql;
	Pageable pageable = paramAccessor.getPageable();
	if (!pageable.equals(Pageable.unpaged())) {
		this.finalGql += LIMIT_CLAUSE;
		this.tagsOrdered.add(LIMIT_TAG_NAME);
		this.limitPosition = this.params.size();
		this.params.add(pageable.getPageSize());

		this.finalGql += OFFSET_CLAUSE;
		this.tagsOrdered.add(OFFSET_TAG_NAME);
		this.cursorPosition = this.params.size();
		if (pageable instanceof DatastorePageable && ((DatastorePageable) pageable).toCursor() != null) {
			this.params.add(((DatastorePageable) pageable).toCursor());
		}
		else {
			this.params.add(pageable.getOffset());
		}
	}
}
 
源代码29 项目: spring-data-ebean   文件: PartTreeEbeanQuery.java
private Sort getDynamicSort(Object[] values) {
    return parameters.potentiallySortsDynamically() ? new ParametersParameterAccessor(parameters, values).getSort()
            : null;
}
 
/**
 * <p>
 * Handle {@code @Param}.
 * </P>
 * <OL>
 * <LI><B>Without {@code @Param}</B>
 * <p>
 * Arguments to the call are assumed to follow the same sequence as cited in the method name.
 * </P>
 * <p>
 * Eg.
 * <p>
 * <pre>
 * findBy<U>One</U>And<U>Two</U>(String <U>one</U>, String <U>two</U>);
 * </pre>
 * </P>
 * </LI>
 * <LI><B>With {@code @Param}</B>
 * <p>
 * Arguments to the call are use the {@code @Param} to match them against the fields.
 * <p>
 * Eg.
 * <p>
 * <pre>
 * findBy<U>One</U>And<U>Two</U>(@Param("two") String <U>two</U>, @Param("one") String <U>one</U>);
 * </pre>
 * </P>
 * </LI>
 * </OL>
 *
 * @param originalParameters Possibly empty
 * @param partTree           Query tree to traverse
 * @return Parameters in correct order
 */
private ParametersParameterAccessor prepareAccessor(final Object[] originalParameters, final PartTree partTree) {

    if (!this.isRearrangeKnown) {
        this.prepareRearrange(partTree, this.queryMethod.getParameters().getBindableParameters());
        this.isRearrangeKnown = true;
    }

    Object[] parameters = originalParameters;
    Assert.notNull(parameters, "Parameters must not be null.");

    if (this.isRearrangeRequired) {
        parameters = new Object[originalParameters.length];

        for (int i = 0; i < parameters.length; i++) {
            int index = (i < rearrangeIndex.length) ? rearrangeIndex[i] : i;
            parameters[i] = originalParameters[index];
        }
    }

    return new ParametersParameterAccessor(this.queryMethod.getParameters(), parameters);
}