From cc2696fcc45295aaa905734169613a37208e019b Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 18 Aug 2015 13:53:02 +0200 Subject: [PATCH] DATACMNS-755 - Fixed QSort property translation for plain paths. If standard Querydsl StringPaths are used without any reference to a query class tree, we previously dropped the first segment of the path expression. Moved to a completely different algorithm to determine the path by just using the Path's toString() representation and the root removed if necessary. --- .../org/springframework/data/querydsl/QSort.java | 15 +++------------ .../data/querydsl/QSortUnitTests.java | 12 ++++++++++++ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/springframework/data/querydsl/QSort.java b/src/main/java/org/springframework/data/querydsl/QSort.java index 2043d30f2..01a26ddde 100644 --- a/src/main/java/org/springframework/data/querydsl/QSort.java +++ b/src/main/java/org/springframework/data/querydsl/QSort.java @@ -22,12 +22,10 @@ import java.util.List; import org.springframework.data.domain.Sort; import org.springframework.util.Assert; -import org.springframework.util.StringUtils; import com.mysema.query.types.Expression; import com.mysema.query.types.OrderSpecifier; import com.mysema.query.types.Path; -import com.mysema.query.types.PathMetadata; /** * Sort option for queries that wraps a querydsl {@link OrderSpecifier}. @@ -154,16 +152,9 @@ public class QSort extends Sort implements Serializable { */ private static String preparePropertyPath(Path path) { - PathMetadata metadata = path.getMetadata(); - Path parent = metadata.getParent(); + Path root = path.getRoot(); - if (parent == null) { - return ""; - } - - String basPath = preparePropertyPath(parent); - String element = metadata.getElement().toString(); - - return StringUtils.hasText(basPath) ? basPath.concat(".").concat(element) : basPath.concat(element); + return root == null || path.equals(root) ? path.toString() + : path.toString().substring(root.toString().length() + 1); } } diff --git a/src/test/java/org/springframework/data/querydsl/QSortUnitTests.java b/src/test/java/org/springframework/data/querydsl/QSortUnitTests.java index 86bf7e163..c9c7454e2 100644 --- a/src/test/java/org/springframework/data/querydsl/QSortUnitTests.java +++ b/src/test/java/org/springframework/data/querydsl/QSortUnitTests.java @@ -31,6 +31,7 @@ import org.springframework.data.domain.Sort.Order; import com.mysema.query.annotations.QueryInit; import com.mysema.query.types.OrderSpecifier; +import com.mysema.query.types.path.StringPath; /** * Unit tests for {@link QSort}. @@ -202,6 +203,17 @@ public class QSortUnitTests { assertThat(sort, hasItems(new Order(Direction.ASC, "wrapperForUserWrapper.wrapper.user.firstname"))); } + /** + * @see DATACMNS-755 + */ + @Test + public void handlesPlainStringPathsCorrectly() { + + QSort sort = new QSort(new OrderSpecifier(com.mysema.query.types.Order.ASC, new StringPath("firstname"))); + + assertThat(sort, hasItems(new Order(Direction.ASC, "firstname"))); + } + @com.mysema.query.annotations.QueryEntity static class WrapperToWrapWrapperForUserWrapper {