如何按日期对查询结果进行排序(Jpa、Java集合) 公共列表findRange(int[]范围){ CriteriaQuery cq=em.getCriteriaBuilder().createQuery(); cq.select(cq.from(Movie.class)); 查询q=em.createQuery(cq); q、 setMaxResults(范围[1]-范围[0]); q、 setFirstResult(范围[0]); List list1=q.getResultList(); Collections.sort(list1,newcomparator(){ 公共整数比较(对象o1、对象o2){ 电影p1=(电影)o1; 电影p2=(电影)o2; 返回p2.getDate().compareTo(p1.getDate()); } }); 返回列表1; }

如何按日期对查询结果进行排序(Jpa、Java集合) 公共列表findRange(int[]范围){ CriteriaQuery cq=em.getCriteriaBuilder().createQuery(); cq.select(cq.from(Movie.class)); 查询q=em.createQuery(cq); q、 setMaxResults(范围[1]-范围[0]); q、 setFirstResult(范围[0]); List list1=q.getResultList(); Collections.sort(list1,newcomparator(){ 公共整数比较(对象o1、对象o2){ 电影p1=(电影)o1; 电影p2=(电影)o2; 返回p2.getDate().compareTo(p1.getDate()); } }); 返回列表1; },java,jpa,collections,Java,Jpa,Collections,由于它现在可以进行排序,但只能在批中使用, (批处理=4部电影)第一部=最后输入;最后一个=第一次输入 但仅与批次中的产品进行比较,并非所有产品都符合要求 非常感谢您提供的任何帮助 致以最诚挚的问候 Ignacio您可能应该在条件查询中定义顺序,而不是在执行查询后对结果进行排序。否则,您将只对结果的一部分进行排序 您可以使用为查询分配排序顺序。可以使用CriteriaBuilder使用升序或降序创建order by表达式 以下操作可能有效,也可能无效: public List<Movie&

由于它现在可以进行排序,但只能在批中使用,
(批处理=4部电影)第一部=最后输入;最后一个=第一次输入
但仅与批次中的产品进行比较,并非所有产品都符合要求

非常感谢您提供的任何帮助
致以最诚挚的问候

Ignacio

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

您可以使用为查询分配排序顺序。可以使用CriteriaBuilder使用升序或降序创建order by表达式

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

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;
}
公共列表findRange(int[]范围){
CriteriaBuilder cb=em.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Movie.class);
Root movie=cq.from(movie.class);
选择(电影);
订单(cb.asc(movie.get(movie.getDate());
...
}

非常感谢您,但它不起作用,为什么您已经知道它可能不起作用?我可以做些什么来让它起作用?我猜它可能不起作用,因为我没有测试它。我想编译器或JPA引擎可能会记录一些提示出错的消息。JEE 6教程包含一点about排序结果在JPA2中:它工作了!!!!非常感谢您只需要一个正确的设置,只有一个问题。为什么cq.order(cb.asc(movie.get(movie.getDate())而不是以前的cq.orderBy(cb.asc(movies.get(“date”))可能调用的基于字符串的API需要显式转换,以防止将日期作为路径进行比较。使用
movie.get(“date”)
可能会更好。在这种情况下,使用元模型更简单。
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()));


    ...

}