diff --git a/src/main/java/org/springframework/data/couchbase/repository/query/support/N1qlUtils.java b/src/main/java/org/springframework/data/couchbase/repository/query/support/N1qlUtils.java index a65fcdd9..49f07f1d 100644 --- a/src/main/java/org/springframework/data/couchbase/repository/query/support/N1qlUtils.java +++ b/src/main/java/org/springframework/data/couchbase/repository/query/support/N1qlUtils.java @@ -197,7 +197,16 @@ public class N1qlUtils { for (Sort.Order order : sort) { String orderProperty = order.getProperty(); //FIXME the order property should be converted to its corresponding fieldName - Expression orderFieldName = i(orderProperty); + String[] orderPropertyParts = orderProperty.split("\\."); + + StringBuilder sb = new StringBuilder(); + for (String part:orderPropertyParts) { + if (sb.length() != 0) { + sb.append("."); + } + sb.append(i(part).toString()); + } + Expression orderFieldName = x(sb.toString()); if (order.isIgnoreCase()) { orderFieldName = lower(TypeFunctions.toString(orderFieldName)); } diff --git a/src/test/java/org/springframework/data/couchbase/repository/query/support/N1qlUtilsTest.java b/src/test/java/org/springframework/data/couchbase/repository/query/support/N1qlUtilsTest.java index f5d0111a..a2285360 100644 --- a/src/test/java/org/springframework/data/couchbase/repository/query/support/N1qlUtilsTest.java +++ b/src/test/java/org/springframework/data/couchbase/repository/query/support/N1qlUtilsTest.java @@ -147,4 +147,14 @@ public class N1qlUtilsTest { assertEquals(expected, real); } + + @Test + public void testOrderByWithNestedField() throws Exception { + CouchbaseConverter converter = mock(CouchbaseConverter.class); + com.couchbase.client.java.query.dsl.Sort[] realSort = + N1qlUtils.createSort(new Sort("party.attendees"), converter); + + assertEquals("`party`.`attendees` ASC", realSort[0].toString()); + verifyZeroInteractions(converter); + } } \ No newline at end of file