From 18c4f32f9d2e0d1bb3c149cafba5a297984cfaeb Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Mon, 4 Sep 2017 09:48:25 +0200 Subject: [PATCH] =?UTF-8?q?DATAJPA-1171=20-=20CrudRepository.exists(?= =?UTF-8?q?=E2=80=A6)=20does=20no=20longer=20contain=20a=201=20=3D=201=20c?= =?UTF-8?q?lause=20in=20query.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changed the query generating code to use streams and joiner which made it simpler and the use of 1 = 1 superfluous. Original pull request: #212. --- .../data/jpa/repository/query/QueryUtils.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java b/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java index aa6dd1bbb..61b0558b6 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java @@ -32,6 +32,7 @@ import java.util.Map; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; import javax.persistence.EntityManager; import javax.persistence.ManyToOne; @@ -57,6 +58,7 @@ import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Order; import org.springframework.data.jpa.domain.JpaSort.JpaOrder; import org.springframework.data.mapping.PropertyPath; +import org.springframework.data.util.StreamUtils; import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -183,16 +185,13 @@ public abstract class QueryUtils { public static String getExistsQueryString(String entityName, String countQueryPlaceHolder, Iterable idAttributes) { - StringBuilder sb = new StringBuilder(String.format(COUNT_QUERY_STRING, countQueryPlaceHolder, entityName)); - sb.append(" WHERE "); + String baseQuery = String.format(COUNT_QUERY_STRING, countQueryPlaceHolder, entityName); - for (String idAttribute : idAttributes) { - sb.append(String.format(EQUALS_CONDITION_STRING, "x", idAttribute, idAttribute)); - sb.append(" AND "); - } + String whereClause = StreamUtils.createStreamFromIterator(idAttributes.iterator()) + .map(idAttribute -> String.format(EQUALS_CONDITION_STRING, "x", idAttribute, idAttribute)) + .collect(Collectors.joining(" AND ", " WHERE ", "")); - sb.append("1 = 1"); - return sb.toString(); + return baseQuery + whereClause; } /**