diff --git a/src/main/java/org/springframework/data/jpa/repository/query/StringQuery.java b/src/main/java/org/springframework/data/jpa/repository/query/StringQuery.java index d23abb50e..22ed2732a 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/StringQuery.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/StringQuery.java @@ -219,7 +219,6 @@ class StringQuery { bindings.add(parameterIndex != null ? new ParameterBinding(parameterIndex) : new ParameterBinding( parameterName)); - result = query; } } @@ -234,7 +233,9 @@ class StringQuery { } } - bindings.add(binding); + if (!bindings.contains(binding)) { + bindings.add(binding); + } } /** diff --git a/src/test/java/org/springframework/data/jpa/repository/query/StringQueryUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/query/StringQueryUnitTests.java index 8f07cb9a8..0807e5724 100644 --- a/src/test/java/org/springframework/data/jpa/repository/query/StringQueryUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/query/StringQueryUnitTests.java @@ -194,6 +194,24 @@ public class StringQueryUnitTests { assertPositionalBinding(ParameterBinding.class, 1, bindings.get(0)); } + /** + * @see DATAJPA-473 + */ + @Test + public void removesLikeBindingsFromQueryIfQueryContainsSimpleBinding() { + + StringQuery query = new StringQuery("SELECT a FROM Article a WHERE a.overview LIKE %:escapedWord% ESCAPE '~'" + + " OR a.content LIKE %:escapedWord% ESCAPE '~' OR a.title = :word ORDER BY a.articleId DESC"); + + List bindings = query.getParameterBindings(); + + assertThat(bindings, hasSize(2)); + assertNamedBinding(LikeParameterBinding.class, "escapedWord", bindings.get(0)); + assertNamedBinding(ParameterBinding.class, "word", bindings.get(1)); + assertThat(query.getQueryString(), is("SELECT a FROM Article a WHERE a.overview LIKE :escapedWord ESCAPE '~'" + + " OR a.content LIKE :escapedWord ESCAPE '~' OR a.title = :word ORDER BY a.articleId DESC")); + } + private void assertPositionalBinding(Class bindingType, Integer position, ParameterBinding expectedBinding) {