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 92d1b8059..4c4701f77 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 @@ -92,7 +92,7 @@ public abstract class QueryUtils { ALIAS_MATCH = compile(builder.toString(), CASE_INSENSITIVE); builder = new StringBuilder(); - builder.append("(select\\s+((distinct )?(.+)?)\\s+)?(from\\s+"); + builder.append("(select\\s+((distinct )?(.+?)?)\\s+)?(from\\s+"); builder.append(IDENTIFIER); builder.append("(?:\\s+as)?\\s+)"); builder.append(IDENTIFIER_GROUP); diff --git a/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java index 522556181..8f30836a1 100644 --- a/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsUnitTests.java @@ -213,6 +213,16 @@ public class QueryUtilsUnitTests { "select count(distinct m.genre) from Media m where m.user = ?1 order by m.genre asc"); } + /** + * @see DATAJPA-343 + */ + @Test + public void projectsCOuntQueriesForQueriesWithSubselects() { + + assertCountQuery("select o from Foo o where cb.id in (select b from Bar b)", + "select count(o) from Foo o where cb.id in (select b from Bar b)"); + } + private void assertCountQuery(String originalQuery, String countQuery) { assertThat(createCountQueryFor(originalQuery), is(countQuery)); }