如何按日期对查询结果进行排序(Jpa,Java Collections)

Ign*_*rat 2 java collections jpa

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;
}
Run Code Online (Sandbox Code Playgroud)

因为它现在正在排序工作,但只在批处理中,
(批处理= 4部电影)第一部分=最后输入; 最后一个=输入fisrt.
但只与批次中的那些进行比较而不是根据需要进行全部比较.

非常感谢您提供任何帮助,您可以提供
最好的问候
Ignacio

Ale*_*aho 5

您应该在条件查询中定义顺序,而不是在查询已经执行后对结果进行排序.否则,您最终只会对部分结果进行排序.

您可以使用CriteriaQuery.orderBy(Order ...)为查询分配排序顺序.可以使用CriteriaBuilder使用asc(Expression)进行升序或使用desc(Expression)降序创建表达式.

以下可能或可能不起作用:

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()));


    ...

}
Run Code Online (Sandbox Code Playgroud)