Как отсортировать результат запроса по дате (Jpa, Java Collections) - PullRequest
2 голосов
/ 06 марта 2011
public List<Movie> findRange(int[] range) {
    CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
    cq.select(cq.from(Movie.class));
    Query q = em.createQuery(cq);
    q.setMaxResults(range[1] - range[0]);
    q.setFirstResult(range[0]);
    List<Movie> list1 = q.getResultList();
    Collections.sort(list1, new Comparator(){
           public int compare (Object o1, Object o2){
               Movie p1 = (Movie)o1;
               Movie p2 = (Movie)o2;
               return p2.getDate().compareTo(p1.getDate());
           }
       });
    return list1;
}

Как сейчас сортировка работает, но только с партией,
(пакет = 4 фильма) Первый = последний введенный; Последний = первый вошел.
Но только по сравнению с теми, что в партии, не все из них по мере необходимости.

Большое спасибо за любую помощь, которую вы можете оказать
С наилучшими пожеланиями
Игнасио

1 Ответ

5 голосов
/ 06 марта 2011

Вероятно, вам следует определить порядок в запросе критериев, а не сортировать результаты после того, как запрос уже выполнен.В противном случае вы закончите сортировку только части результатов.

Вы можете назначить порядок сортировки для запроса, используя CriteriaQuery.orderBy (Order ...) .Порядок по выражению можно создать с помощью CriteriaBuilder, используя asc (выражение) для возрастания или desc (выражение) для убывания.не работает:

public List<Movie> findRange(int[] range) {
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Movie> cq = cb.createQuery(Movie.class);
    Root<Movie> movie = cq.from(Movie.class);
    cq.select(movie);
    cq.order(cb.asc(movie.get(Movie_.getDate()));


    ...

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...