diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java index 630c561ba4..300895d69b 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java @@ -85,6 +85,7 @@ * @author Pranav HS * @author Eduard Dudar * @author Yanming Zhou + * @author Alim Naizabek */ public abstract class QueryUtils { @@ -428,7 +429,13 @@ static Set getFunctionAliases(String query) { } private static String toJpaDirection(Order order) { - return order.getDirection().name().toLowerCase(Locale.US); + String direction = order.getDirection().name().toLowerCase(Locale.US); + if (order.getNullHandling() == Sort.NullHandling.NULLS_FIRST) { + direction += " nulls first"; + } else if (order.getNullHandling() == Sort.NullHandling.NULLS_LAST) { + direction += " nulls last"; + } + return direction; } /** diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/DefaultQueryEnhancerUnitTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/DefaultQueryEnhancerUnitTests.java index 43a87c8282..8bcfe8e06a 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/DefaultQueryEnhancerUnitTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/DefaultQueryEnhancerUnitTests.java @@ -48,4 +48,14 @@ void shouldApplySorting() { assertThat(sql).isEqualTo("SELECT e FROM Employee e order by e.foo asc, e.bar asc"); } + + @Test + void shouldApplySortingWithNullHandling() { + + QueryEnhancer enhancer = createQueryEnhancer(DeclaredQuery.of("SELECT e FROM Employee e", true)); + + String sql = enhancer.applySorting(Sort.by(Sort.Order.asc("foo").nullsFirst(), Sort.Order.asc("bar").nullsLast())); + + assertThat(sql).isEqualTo("SELECT e FROM Employee e order by e.foo asc nulls first, e.bar asc nulls last"); + } }