DATAJPA-772 - Fixed accidental application of LIKE-expansions for non-String parameters.
ParameterMetadataProvider now applies LIKE-expansions only for String properties.
This commit is contained in:
@@ -224,17 +224,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<? extends T> 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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<Object> 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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user