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 a4d2371de..c1c7f6423 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 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2014 the original author or authors. + * Copyright 2008-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -83,15 +83,15 @@ public abstract class QueryUtils { private static final String IDENTIFIER = "[\\p{Alnum}._$]+"; private static final String IDENTIFIER_GROUP = String.format("(%s)", IDENTIFIER); - private static final String LEFT_JOIN = "left (outer )?join " + IDENTIFIER + " (as )?" + IDENTIFIER_GROUP; - private static final Pattern LEFT_JOIN_PATTERN = Pattern.compile(LEFT_JOIN, Pattern.CASE_INSENSITIVE); + private static final String JOIN = "join " + IDENTIFIER + " (as )?" + IDENTIFIER_GROUP; + private static final Pattern JOIN_PATTERN = Pattern.compile(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 Map> ASSOCIATION_TYPES; - private static final int QUERY_JOIN_ALIAS_GROUP_INDEX = 3; + private static final int QUERY_JOIN_ALIAS_GROUP_INDEX = 2; private static final int VARIABLE_NAME_GROUP_INDEX = 4; static { @@ -252,7 +252,7 @@ public abstract class QueryUtils { static Set getOuterJoinAliases(String query) { Set result = new HashSet(); - Matcher matcher = LEFT_JOIN_PATTERN.matcher(query); + Matcher matcher = JOIN_PATTERN.matcher(query); while (matcher.find()) { 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 03a96e23f..fbcc24158 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 @@ -1,5 +1,5 @@ /* - * Copyright 2008-2014 the original author or authors. + * Copyright 2008-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -150,11 +150,13 @@ public class QueryUtilsUnitTests { assertThat(aliases, hasSize(1)); assertThat(aliases, hasItems("b2_$ar")); - aliases = getOuterJoinAliases("select p from Person p left outer join x.foo as b2_$ar, left join x.bar as foo where …"); + aliases = getOuterJoinAliases( + "select p from Person p left outer join x.foo as b2_$ar, left join x.bar as foo where …"); assertThat(aliases, hasSize(2)); assertThat(aliases, hasItems("b2_$ar", "foo")); - aliases = getOuterJoinAliases("select p from Person p left join x.foo as b2_$ar, left outer join x.bar foo where …"); + aliases = getOuterJoinAliases( + "select p from Person p left join x.foo as b2_$ar, left outer join x.bar foo where …"); assertThat(aliases, hasSize(2)); assertThat(aliases, hasItems("b2_$ar", "foo")); } @@ -281,6 +283,18 @@ public class QueryUtilsUnitTests { is("select count(p.lastname) from Person p")); } + /** + * @see DATAJPA-726 + */ + @Test + public void detectsAliassesInPlainJoins() { + + String query = "select p from Customer c join c.productOrder p where p.delayed = true"; + Sort sort = new Sort("p.lineItems"); + + assertThat(applySorting(query, sort, "c"), endsWith("order by p.lineItems asc")); + } + private void assertCountQuery(String originalQuery, String countQuery) { assertThat(createCountQueryFor(originalQuery), is(countQuery)); }