所以我有一个文档,里面有一个收集字段:
@DocumentReferences(backReference = "barId", fetch = FetchType.LAZY, descendingSortOrder = true, orderBy = "date")
private Set<Foo> foo;
我希望按降序(按日期排序)填充Set。但是,我的CouchDB文档中的日期是一个复杂的键(我正在使用jackson-modules-java8中的JavaTimeModule
来映射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); } }