Итак, у меня есть документ с полем коллекции внутри него:
@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); } }