diff --git a/src/main/java/org/springframework/data/jpa/repository/support/Querydsl.java b/src/main/java/org/springframework/data/jpa/repository/support/Querydsl.java index aef50817b..44883ae03 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/Querydsl.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/Querydsl.java @@ -31,10 +31,12 @@ import com.mysema.query.jpa.HQLTemplates; import com.mysema.query.jpa.JPQLQuery; import com.mysema.query.jpa.OpenJPATemplates; import com.mysema.query.jpa.impl.JPAQuery; +import com.mysema.query.support.Expressions; import com.mysema.query.types.EntityPath; import com.mysema.query.types.Expression; import com.mysema.query.types.OrderSpecifier; import com.mysema.query.types.OrderSpecifier.NullHandling; +import com.mysema.query.types.Path; import com.mysema.query.types.path.PathBuilder; /** @@ -224,9 +226,9 @@ public class Querydsl { if (!path.hasNext() && order.isIgnoreCase()) { // if order is ignore-case we have to treat the last path segment as a String. - sortPropertyExpression = ((PathBuilder) sortPropertyExpression).getString(path.getSegment()).lower(); + sortPropertyExpression = Expressions.stringPath((Path) sortPropertyExpression, path.getSegment()).lower(); } else { - sortPropertyExpression = ((PathBuilder) sortPropertyExpression).get(path.getSegment()); + sortPropertyExpression = Expressions.path(path.getType(), (Path) sortPropertyExpression, path.getSegment()); } path = path.next(); diff --git a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java index 0cdacb131..d4b84de3e 100644 --- a/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -1281,6 +1281,24 @@ public class UserRepositoryTests { assertThat(page.getContent().get(3), is(firstUser)); } + /** + * @see DATAJPA-510 + */ + @Test + public void sortByNestedAssociationPropertyWithSortOrderIgnoreCaseInPageable() { + + firstUser.setManager(thirdUser); + thirdUser.setManager(fourthUser); + + flushTestUsers(); + + Page page = repository.findAll(new PageRequest(0, 10, // + new Sort(new Sort.Order(Direction.ASC, "manager.manager.firstname").ignoreCase()))); + + assertThat(page.getContent(), hasSize(4)); + assertThat(page.getContent().get(3), is(firstUser)); + } + /** * @see DATAJPA-496 */