diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlGenerator.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlGenerator.java index f04177b500..9e86c1d8bc 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlGenerator.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/core/convert/SqlGenerator.java @@ -712,8 +712,9 @@ private List extractOrderByFields(Sort sort) { private OrderByField orderToOrderByField(Sort.Order order) { - SqlIdentifier columnName = this.entity.getRequiredPersistentProperty(order.getProperty()).getColumnName(); - Column column = Column.create(columnName, this.getTable()); + PersistentPropertyPath path = mappingContext.getPersistentPropertyPath(order.getProperty(), this.entity.getType()); + PersistentPropertyPathExtension extPath = new PersistentPropertyPathExtension(mappingContext, path); + Column column = this.getColumn(extPath); return OrderByField.from(column, order.getDirection()); } diff --git a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorUnitTests.java b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorUnitTests.java index ec1c8c1e77..e161447986 100644 --- a/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorUnitTests.java +++ b/spring-data-jdbc/src/test/java/org/springframework/data/jdbc/core/convert/SqlGeneratorUnitTests.java @@ -220,11 +220,11 @@ public void findAllSortedBySingleField() { "ORDER BY x_name ASC"); } - @Test // DATAJDBC-101 + @Test // DATAJDBC-101, DATAJDBC-584 public void findAllSortedByMultipleFields() { String sql = sqlGenerator.getFindAll( - Sort.by(new Sort.Order(Sort.Direction.DESC, "name"), new Sort.Order(Sort.Direction.ASC, "other"))); + Sort.by(new Sort.Order(Sort.Direction.DESC, "name"), new Sort.Order(Sort.Direction.ASC, "ref.content"), new Sort.Order(Sort.Direction.DESC, "ref.further.something"))); assertThat(sql).contains("SELECT", // "dummy_entity.id1 AS id1", // @@ -238,7 +238,8 @@ public void findAllSortedByMultipleFields() { "LEFT OUTER JOIN referenced_entity ref ON ref.dummy_entity = dummy_entity.id1", // "LEFT OUTER JOIN second_level_referenced_entity ref_further ON ref_further.referenced_entity = ref.x_l1id", // "ORDER BY x_name DESC", // - "x_other ASC"); + "ref_x_content ASC", // + "ref_further_x_something DESC" ); } @Test // DATAJDBC-101