Из загрузочного приложения Spring я хочу использовать Redis и получать выгруженные и отсортированные результаты.
Конфигурация Maven:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.10.2</version>
<type>jar</type>
</dependency>
На основе онлайн-примера я реализовал следующий репозиторий:
@Repository
public interface StudentRepository extends PagingAndSortingRepository<Student, String> {
List<Student> findByName(String Name, Pageable page);
List<Student> findByName(String Name);
}
Теперь я хочу отфильтровать студента, используя
studentRepository.findAll(Sort.by("range").ascending());
Со студентом:
@RedisHash("Student")
public class Student implements Serializable {
@Id
private String id;
@Indexed
private String name;
private Gender gender;
private int grade;
Независимо от видапорядок всегда одинаков.После сеанса отладки я понял, что причина в следующем:
class RedisQueryEngine extends QueryEngine<RedisKeyValueAdapter, RedisOperationChain, Comparator<?>> {
/**
* Creates new {@link RedisQueryEngine} with defaults.
*/
RedisQueryEngine() {
this(new RedisCriteriaAccessor(), null);
}
/**
* Creates new {@link RedisQueryEngine}.
*
* @param criteriaAccessor
* @param sortAccessor
* @see QueryEngine#QueryEngine(CriteriaAccessor, SortAccessor)
*/
private RedisQueryEngine(CriteriaAccessor<RedisOperationChain> criteriaAccessor,
@Nullable SortAccessor<Comparator<?>> sortAccessor) {
super(criteriaAccessor, sortAccessor);
}
Открытый конструктор, вызываемый Spring, не определил sortAccessor.Этот метод доступа сортировки затем используется в классе QueryEngine моим запросом:
public <T> Collection<T> execute(KeyValueQuery<?> query, String keyspace, Class<T> type) {
CRITERIA criteria = this.criteriaAccessor.map(it -> it.resolve(query)).orElse(null);
SORT sort = this.sortAccessor.map(it -> it.resolve(query)).orElse(null);
return execute(criteria, sort, query.getOffset(), query.getRows(), keyspace, type);
}
Ожидается ли такое поведение?Может ли Redis только страница результатов (это работает, я проверял это), но не сортировать их (в этом случае, подкачки совершенно бесполезно)?