Фон
Я пытаюсь разрешить сортировку данных в сетке Ваадина. Данные извлекаются из бэкэнда с использованием вызовов REST. Типы бинов выглядят примерно так:
public class Event {
private Type type;
private LocalDateTime latest;
//... getters, setters, etc.
}
public class Type {
private String name;
private String callCode;
//... getters, setters, etc.
}
Мы используем FilterablePageableDataProvider ( исходный код ) для загрузки данных из серверной части. Важные методы:
dataProvider = new FilterablePageableDataProvider<Type, Object> {
@Override
protected Stream<Type> fetchFromBackEnd(Query<Type, Object> query) {
return typeService.fetchFromBackEnd(query);
}
@Override
protected int sizeInBackEnd(Query<Type, Object> query) {
return typeService.sizeInBackEnd(query);
}
@Override
protected List<QuerySortOrder> getDefaultSortOrders() {
return Sort.asc("name").build();
}
};
Включение следующего кода для помещения его в столбец Grid<Type>
работает нормально, и сортировка не представляет проблемы:
grid.addColumn(type -> type.getName()).setSortProperty("name");
grid.addColumn(type -> type.getCallCode()).setSortProperty("callCode");
Задача
Что меня устраивает, так это попытка выяснить, как сортировать столбцы при использовании элемента сетки в качестве параметра в запросе, например:
grid.addColumn(type -> eventService.countByType(type));
Использование setSortProperty(String ... properties)
больше не работает, а об использовании Comparator не может быть и речи, потому что слишком много данных для сортировки в памяти.
Как сделать этот запрос сортируемым в моей сетке?