From 94c4713e0f8a7e733f960035e851b7989d059c47 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 23 Jul 2019 14:00:52 +0200 Subject: [PATCH] DATACMNS-1556 - Conditionally copy and unwrap query method arguments. ParametersParameterAccessor now inspects invocation arguments whether we need to unwrap these at all. If not, we skip copying the list of values. --- .../query/ParametersParameterAccessor.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/repository/query/ParametersParameterAccessor.java b/src/main/java/org/springframework/data/repository/query/ParametersParameterAccessor.java index 7341a73e5..9e924140e 100644 --- a/src/main/java/org/springframework/data/repository/query/ParametersParameterAccessor.java +++ b/src/main/java/org/springframework/data/repository/query/ParametersParameterAccessor.java @@ -16,6 +16,7 @@ package org.springframework.data.repository.query; import java.util.ArrayList; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.Optional; @@ -51,11 +52,26 @@ public class ParametersParameterAccessor implements ParameterAccessor { Assert.isTrue(parameters.getNumberOfParameters() == values.length, "Invalid number of parameters given!"); this.parameters = parameters; - this.values = new ArrayList<>(values.length); + + if (requiresUnwrapping(values)) { + this.values = new ArrayList<>(values.length); + for (Object value : values) { + this.values.add(QueryExecutionConverters.unwrap(value)); + } + } else { + this.values = Arrays.asList(values); + } + } + + private static boolean requiresUnwrapping(Object[] values) { for (Object value : values) { - this.values.add(QueryExecutionConverters.unwrap(value)); + if (value != null && QueryExecutionConverters.supports(value.getClass())) { + return true; + } } + + return false; } /**