From ae03311af279d66b1d421257d99f93fd07db0206 Mon Sep 17 00:00:00 2001 From: Thomas Darimont Date: Mon, 24 Mar 2014 10:56:50 +0100 Subject: [PATCH] DATAJPA-504 - Regression in Querydsl OrderSpecifier customization. Removed custom querydsl left join generation for order fields. The recent versions of Querydsl already do this properly - so there is no need for us anymore to add left-joins ourselves. Previously we had to generate additional left-joins since Querydsl did not support ordering by an attribute that was not part of the projection. Original pull request: #73. --- .../data/jpa/repository/support/Querydsl.java | 52 +------------------ 1 file changed, 2 insertions(+), 50 deletions(-) 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 3afd09aa6..b7638cdee 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 @@ -15,7 +15,6 @@ */ package org.springframework.data.jpa.repository.support; -import java.util.ArrayList; import java.util.List; import javax.persistence.EntityManager; @@ -36,7 +35,6 @@ 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; /** @@ -144,55 +142,9 @@ public class Querydsl { */ private JPQLQuery addOrderByFrom(QSort qsort, JPQLQuery query) { - return query.orderBy(adjustOrderSpecifierIfNecessary(qsort.getOrderSpecifiers(), query)); - } - /** - * Rewrites the given {@link OrderSpecifier} if necessary, e.g. generates proper aliases and left-joins to be created - * if we detect ordering by an nested attribute. - * - * @param originalOrderSpecifiers must not be {@literal null}. - * @param query must not be {@literal null}. - * @return - */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - private OrderSpecifier[] adjustOrderSpecifierIfNecessary(List> originalOrderSpecifiers, - JPQLQuery query) { - - Assert.notNull(originalOrderSpecifiers, "Original order specifiers must not be null!"); - Assert.notNull(query, "Query must not be null!"); - - boolean orderModificationNecessary = false; - List> modifiedOrderSpecifiers = new ArrayList>(); - - for (OrderSpecifier order : originalOrderSpecifiers) { - - Path targetPath = ((Path) order.getTarget()).getMetadata().getParent(); - - boolean targetPathRootIsEntityRoot = targetPath.getRoot().equals(builder.getRoot()); - boolean targetPathEqualsRootEnityPath = targetPath.toString().equals(builder.toString()); - boolean targetPathIsEntityPath = targetPath instanceof EntityPath; - - if (!targetPathRootIsEntityRoot) { - - query.leftJoin((EntityPath) builder.get((String) targetPath.getMetadata().getElement()), targetPath); - } else if (targetPathRootIsEntityRoot && !targetPathEqualsRootEnityPath && targetPathIsEntityPath) { - - PathBuilder joinPathBuilder = new PathBuilder(targetPath.getType(), targetPath.getMetadata().getElement() - .toString()); - query.leftJoin((EntityPath) targetPath, joinPathBuilder); - OrderSpecifier modifiedOrder = new OrderSpecifier(order.getOrder(), joinPathBuilder.get(((Path) order - .getTarget()).getMetadata().getElement().toString()), order.getNullHandling()); - modifiedOrderSpecifiers.add(modifiedOrder); - orderModificationNecessary = true; - continue; - } - - modifiedOrderSpecifiers.add(order); - } - - return orderModificationNecessary ? modifiedOrderSpecifiers.toArray(new OrderSpecifier[modifiedOrderSpecifiers - .size()]) : originalOrderSpecifiers.toArray(new OrderSpecifier[originalOrderSpecifiers.size()]); + List> orderSpecifiers = qsort.getOrderSpecifiers(); + return query.orderBy(orderSpecifiers.toArray(new OrderSpecifier[orderSpecifiers.size()])); } /**