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 37aca64bf..a4d7a9372 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 @@ -79,6 +79,7 @@ public abstract class QueryUtils { private static final Pattern LEFT_JOIN_PATTERN = Pattern.compile(LEFT_JOIN, Pattern.CASE_INSENSITIVE); private static final String EQUALS_CONDITION_STRING = "%s.%s = :%s"; + private static final Pattern ORDER_BY = Pattern.compile(".*order\\s+by\\s+.*", CASE_INSENSITIVE); private static final Set ASSOCIATION_TYPES; @@ -186,7 +187,7 @@ public abstract class QueryUtils { StringBuilder builder = new StringBuilder(query); - if (!query.contains("order by")) { + if (!ORDER_BY.matcher(query).matches()) { builder.append(" order by "); } else { builder.append(", "); 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 158933555..7166f28e1 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 @@ -244,6 +244,17 @@ public class QueryUtilsUnitTests { "select count(distinct m.genre) from Media m where m.user = ?1"); } + /** + * @see DATAJPA-375 + */ + @Test + public void findsExistingOrderByIndependentOfCase() { + + Sort sort = new Sort("lastname"); + String query = applySorting("select p from Person p ORDER BY p.firstname", sort, "p"); + assertThat(query, endsWith("ORDER BY p.firstname, p.lastname asc")); + } + private void assertCountQuery(String originalQuery, String countQuery) { assertThat(createCountQueryFor(originalQuery), is(countQuery)); }