2016-10-19 6 views
1

Я написал запрос об использовании, как показано ниже;Реализация пейджинга с помощью спящего режима

AuditReader reader = AuditReaderFactory.get(entityManager); 
List<Object[]> changes = reader.createQuery() 
    .forRevisionsOfEntity(cls, true, true) 
    // Various conditions 
    .getResultList(); 

То, что я хотел бы сделать, это получить результаты в страницах, может быть сделано в PagingAndSortingRepository<T,ID>, я это почти рабочий, как показано ниже

int start = page.getOffset(); 
int end = (start + page.getPageSize()) > history.size() ? history.size() : (start + page.getPageSize()); 
Page page = new PageImpl<HistoryEntry>(history.subList(start, end), page, history.size()); 

Моя проблема заключается в том, что, когда сделано таким образом, я не может сортировать данные, как ожидалось, то есть size=2&sort=action,desc не сортирует независимо от того, какое значение я использую (asc/desc).

history - это список объектов со следующими полями;

private String timestamp; 
private String userName; 
private String objectName; 
private String objectType; 
private String action; 
private String field; 
private String oldValue; 
private String newValue; 

Для осуществления поискового вызова, фильтрации и сортировки через Envers бы это нужно сделать с помощью оригинального Envers запроса или может пейджинговой вид после этого?

+0

Я столкнулся с этим вопросом, пытаясь добиться того же. Оглядываясь назад, вы все равно решите свою проблему получения постраничных результатов HistoryEntries таким образом? (или вы бы создали какой-то хранилище?) – Spork

ответ

2

Похоже, что класс PageImpl ожидает List<T>, который вы указываете в конструкторе как подмножество строк для данной страницы, уже предварительно отсортированных. Поэтому нам нужно применить операции сортировки как часть запроса Envers.

List<Object[]> changes = reader.createQuery() 
.forRevisionsOfEntity(cls, true, false) 
// various predicate conditions 
.addOrder(AuditEntity.property("someField").desc()) 
.getResultList(); 

Применить Рода таким образом, то позволит код, в котором вы выбрали подмножество для страницы из результатов работы по назначению.

Смежные вопросы