Упорядочить по сложному ключу при получении коллекций с транзитивным постоянством - PullRequest
0 голосов
/ 31 августа 2018

Итак, у меня есть документ с полем коллекции внутри него:

@DocumentReferences(backReference = "barId", fetch = FetchType.LAZY, descendingSortOrder = true, orderBy = "date")
private Set<Foo> foo;

Я хочу, чтобы Набор был заполнен в порядке убывания, отсортирован по дате. Однако дата в моем документе CouchDB является сложным ключом (я использую JavaTimeModule из jackson-modules-java8 для сопоставления LocalDateTime объектов):

"date": [
  2018,
  8,
  15,
  11,
  56,
  41,
  621000000
]

Но когда я выбираю объект Bar, а затем выполняю bar.getFoo() для его заполнения, foo не сортируется каким-либо значимым образом, это беспорядок. Однако, если я получаю Foo документы напрямую, например:

ViewQuery query = new ViewQuery()
                .designDocId("_design/Foo")
                .viewName("by_date")
                .descending(true)
                .includeDocs(true);

List<Foo> result = db.queryView(query, Foo.class);

тогда сортируется так, как должно. Запрос диапазона с такими сложными ключами тоже работает:

LocalDate chosen = datePicker.getValue();
ComplexKey end = ComplexKey.of(chosen.getYear(), chosen.getMonthValue(), chosen.getDayOfMonth(), 0); 
// order for query will be descending, that's why the end key is before start key
LocalDate nextDay = chosen.plusDays(1);
ComplexKey start = ComplexKey.of(nextDay.getYear(), nextDay.getMonthValue(), nextDay.getDayOfMonth(), 0);

Так как же заставить сортировку работать с транзитивным постоянством, что я делаю не так? Представление ektorp_docrefs_foo было создано BarRepository в _design/Bar автоматически, заполнение работает, только сортировка нарушена. Сам вид выглядит так: function(doc) { if(doc.barId) { emit([doc.barId, 'foo'], null); } }

...