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 5003501027..0b2c160d48 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 @@ -47,6 +47,7 @@ * @author Thomas Darimont * @author Mark Paluch * @author Christoph Strobl + * @author Marcus Voltolim */ public class Querydsl { @@ -235,7 +236,7 @@ private Expression buildOrderPropertyPathFrom(Order order) { while (path != null) { - sortPropertyExpression = !path.hasNext() && order.isIgnoreCase() // + sortPropertyExpression = !path.hasNext() && order.isIgnoreCase() && String.class == path.getType() // ? Expressions.stringPath((Path) sortPropertyExpression, path.getSegment()).lower() // : Expressions.path(path.getType(), (Path) sortPropertyExpression, path.getSegment()); diff --git a/src/test/java/org/springframework/data/jpa/repository/support/QuerydslIntegrationTests.java b/src/test/java/org/springframework/data/jpa/repository/support/QuerydslIntegrationTests.java index 17bb9dafd0..0282a15dfe 100644 --- a/src/test/java/org/springframework/data/jpa/repository/support/QuerydslIntegrationTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/support/QuerydslIntegrationTests.java @@ -32,11 +32,14 @@ import com.querydsl.core.types.dsl.PathBuilder; import com.querydsl.jpa.JPQLQuery; +import java.util.stream.Stream; + /** * Integration tests for {@link Querydsl}. * * @author Thomas Darimont * @author Jens Schauder + * @author Marcus Voltolim */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "classpath:infrastructure.xml" }) @@ -52,7 +55,7 @@ public class QuerydslIntegrationTests { @Before public void setup() { - userPath = new PathBuilder(User.class, "user"); + userPath = new PathBuilder<>(User.class, "user"); querydsl = new Querydsl(em, userPath); userQuery = querydsl.createQuery().select(userPath); } @@ -67,4 +70,17 @@ public void defaultOrderingShouldNotGenerateAnNullOrderingHint() { .doesNotContain("nulls first") // .doesNotContain("nulls last"); } + + @Test // DATAJPA-1198; DATAJPA-1779 + public void orderWithIgnoreCaseAddLowerOnlyStringType() { + // firstname (String); id (Integer); dateOfBirth (Date) + Sort.Order[] orders = Stream.of("firstname", "id", "dateOfBirth").map(name -> Sort.Order.asc(name).ignoreCase()).toArray(Sort.Order[]::new); + JPQLQuery result = querydsl.applySorting(Sort.by(orders), userQuery); + + assertThat(result).isNotNull(); + assertThat(result.toString()) // + .startsWith("select user") // + .endsWith("order by lower(user.firstname) asc, user.id asc, user.dateOfBirth asc"); + } + }