有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何按日期对查询结果进行排序(Jpa、Java集合)

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) 个答案

  1. # 1 楼答案

    您可能应该在条件查询中定义顺序,而不是在查询执行后对结果进行排序。否则,您将只对结果的一部分进行排序

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

    以下可能有效,也可能无效:

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