通过传递持久性获取集合时,按复杂键排序

时间:2018-08-31 06:29:03

标签: couchdb ektorp

所以我有一个文档,里面有一个收集字段:

@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); } }

0 个答案:

没有答案