From e100e9800a0d8018d70720d381bc3fb174eb7474 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 25 Mar 2015 22:22:11 +0200 Subject: [PATCH] Fix issue with order by expressions for non root paths --- .../java/com/querydsl/jpa/JPAQueryMixin.java | 1 + .../com/querydsl/jpa/JPAQueryMixinTest.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java index e73a16f88..a915db42a 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java @@ -146,6 +146,7 @@ public class JPAQueryMixin extends QueryMixin { Path oldPath = new PathImpl(path.getType(), new PathMetadata(parent, metadata.getElement(), metadata.getPathType())); Path newPath = new PathImpl(type, oldPath.toString().replace('.', '_')); + aliases.put(path, newPath); leftJoin(oldPath, newPath); return newPath; } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java index 90dcc42ad..801e777cb 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java @@ -13,6 +13,9 @@ import com.querydsl.core.types.PathMetadataFactory; import com.querydsl.core.types.Predicate; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.jpa.domain.QCat; +import com.querydsl.jpa.domain.QCompany; +import com.querydsl.jpa.domain.QDepartment; +import com.querydsl.jpa.domain.QEmployee; import com.querydsl.jpa.domain4.QBookMark; import com.querydsl.jpa.domain4.QBookVersion; @@ -41,6 +44,24 @@ public class JPAQueryMixinTest { md.getOrderBy()); } + @Test + public void OrderBy_NonRoot_Twice() { + QDepartment department = QDepartment.department; + QCompany department_company = new QCompany("department_company"); + QEmployee department_company_ceo = new QEmployee("department_company_ceo"); + mixin.from(department); + mixin.orderBy(department.company.ceo.firstName.asc(), department.company.ceo.lastName.asc()); + + QueryMetadata md = mixin.getMetadata(); + assertEquals(Arrays.asList( + new JoinExpression(JoinType.DEFAULT, department), + new JoinExpression(JoinType.LEFTJOIN, department.company.as(department_company)), + new JoinExpression(JoinType.LEFTJOIN, department_company.ceo.as(department_company_ceo))), + md.getJoins()); + assertEquals(Arrays.asList(department_company_ceo.firstName.asc(), department_company_ceo.lastName.asc()), + md.getOrderBy()); + } + @Test public void OrderBy_Where() { QCat cat = QCat.cat;