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部电影)第一部分=最后输入;最后一个=输入fisrt。
但只是与批次中的那些相比,并不是所有这些都是必要的。
非常感谢您提供的任何帮助 最好的问候 伊格纳西奥
答案 0 :(得分: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()));
...
}