diff --git a/src/main/java/org/springframework/data/jpa/repository/query/ParameterMetadataProvider.java b/src/main/java/org/springframework/data/jpa/repository/query/ParameterMetadataProvider.java index 5cbd06a6c..9fefcb9a4 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/ParameterMetadataProvider.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/ParameterMetadataProvider.java @@ -225,17 +225,24 @@ class ParameterMetadataProvider { Assert.notNull(value); - switch (type) { - case STARTING_WITH: - return String.format("%s%%", value.toString()); - case ENDING_WITH: - return String.format("%%%s", value.toString()); - case CONTAINING: - return String.format("%%%s%%", value.toString()); - default: - return Collection.class.isAssignableFrom(expression.getJavaType()) - ? persistenceProvider.potentiallyConvertEmptyCollection(toCollection(value)) : value; + Class expressionType = expression.getJavaType(); + + if (String.class.equals(expressionType)) { + + switch (type) { + case STARTING_WITH: + return String.format("%s%%", value.toString()); + case ENDING_WITH: + return String.format("%%%s", value.toString()); + case CONTAINING: + return String.format("%%%s%%", value.toString()); + default: + return value; + } } + + return Collection.class.isAssignableFrom(expressionType) + ? persistenceProvider.potentiallyConvertEmptyCollection(toCollection(value)) : value; } /** diff --git a/src/test/java/org/springframework/data/jpa/repository/query/ParameterMetadataProviderIntegrationTests.java b/src/test/java/org/springframework/data/jpa/repository/query/ParameterMetadataProviderIntegrationTests.java index 38d46746a..9ad69a7e9 100644 --- a/src/test/java/org/springframework/data/jpa/repository/query/ParameterMetadataProviderIntegrationTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/query/ParameterMetadataProviderIntegrationTests.java @@ -72,6 +72,18 @@ public class ParameterMetadataProviderIntegrationTests { assertThat(metadata.getExpression().getName(), is(nullValue())); } + /** + * @see DATAJPA-772 + */ + @Test + public void doesNotApplyLikeExpansionOnNonStringProperties() throws Exception { + + ParameterMetadataProvider provider = createProvider(Sample.class.getMethod("findByAgeContaining", Integer.class)); + ParameterMetadata metadata = provider.next(new Part("ageContaining", User.class)); + + assertThat(metadata.prepare(1), is((Object) 1)); + } + private ParameterMetadataProvider createProvider(Method method) { JpaParameters parameters = new JpaParameters(method); @@ -94,5 +106,7 @@ public class ParameterMetadataProviderIntegrationTests { User findByFirstname(@Param("name") String firstname); User findByLastname(String lastname); + + User findByAgeContaining(@Param("age") Integer age); } }