From b28bf506eff034dabed9d94e3e3212b9f7ba2405 Mon Sep 17 00:00:00 2001 From: Michael Bragg Date: Tue, 7 Mar 2017 14:11:04 +0000 Subject: [PATCH] DATACMNS-1002 - Generic class parameter not being bound to query. Marks a Parameter as bindable if it is explicitly named. --- .../data/repository/query/Parameter.java | 3 ++- .../data/repository/query/ParametersUnitTests.java | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/springframework/data/repository/query/Parameter.java b/src/main/java/org/springframework/data/repository/query/Parameter.java index 557b8caf9b..882b4c5de9 100644 --- a/src/main/java/org/springframework/data/repository/query/Parameter.java +++ b/src/main/java/org/springframework/data/repository/query/Parameter.java @@ -34,6 +34,7 @@ * Class to abstract a single parameter of a query method. It is held in the context of a {@link Parameters} instance. * * @author Oliver Gierke + * @author Michael Bragg */ public class Parameter { @@ -76,7 +77,7 @@ public boolean isSpecialParameter() { * @return */ public boolean isBindable() { - return !isSpecialParameter(); + return this.isExplicitlyNamed() || !isSpecialParameter(); } /** diff --git a/src/test/java/org/springframework/data/repository/query/ParametersUnitTests.java b/src/test/java/org/springframework/data/repository/query/ParametersUnitTests.java index 6a5cd005fd..88019e235e 100644 --- a/src/test/java/org/springframework/data/repository/query/ParametersUnitTests.java +++ b/src/test/java/org/springframework/data/repository/query/ParametersUnitTests.java @@ -31,6 +31,7 @@ * Unit test for {@link Parameters}. * * @author Oliver Gierke + * @author Michael Bragg */ public class ParametersUnitTests { @@ -131,6 +132,16 @@ public void detectsExplicitlyNamedParameter() throws Exception { assertThat(parameter.isExplicitlyNamed(), is(true)); } + @Test // DATACMNS-1002 + public void detectsAndBindsDynamicProjectionParameter() throws Exception { + + Parameter parameter = getParametersFor("validWithDynamicBind", Class.class).getBindableParameter(0); + + assertThat(parameter.getName(), is(notNullValue())); + assertThat(parameter.isBindable(), is(true)); + assertThat(parameter.isExplicitlyNamed(), is(true)); + } + @Test // DATACMNS-731 public void doesNotConsiderParameterExplicitlyNamedEvenIfNamePresent() throws Exception { @@ -193,6 +204,8 @@ static interface SampleDao { T dynamicBind(Class type, Class one, Class two); + T validWithDynamicBind(@Param("type") Class type); + void methodWithOptional(Optional optional); } }