setFirstResult和setMaxResult不与秩序很好地工作通过(setFirstRes

2019-09-16 05:39发布

什么可能导致CriteriaQuery orderBy方法停止工作?

这里是实现:

    OpenJPAEntityManager kem = OpenJPAPersistence.cast(entityManager());
    kem.getFetchPlan().clearFetchGroups();
    kem.getFetchPlan().addFetchGroup("order_search");

    CriteriaBuilder builder = kem.getCriteriaBuilder();
    CriteriaQuery<Order> query = builder.createQuery(Order.class);
    Root<Order> order = query.from(Order.class);
    query.select(order);

    Predicate main_condition = buildWhereClause(builder, query, order, target_states, orderDate_from, orderDate_to, dueDate_from, dueDate_to, username);

    query.where(main_condition);

    query.orderBy(builder.desc(order.get("orderDate")));

    TypedQuery<Order> q = entityManager().createQuery(query);

    if (firstResult != 0)
        q.setFirstResult(firstResult);
    if (maxResults != 0)
        q.setMaxResults(maxResults);

随着pagniation,当有15条记录,我们希望5条每页,它应该是:

-page1- 1 2 3 4 5 -page2- 6 7 8 9 10 -page3- 11 12 13 14 15

但是,现在我们得到的是在这里

-page1- 1 2 3 4 5 -page2- 6 7 8 9 10 -page3- 5 4 3 2 1

最后一页永远是第一页的相反顺序,怎么来的?

Answer 1:

指甲它,而不是由我自己,这个职位是非常有帮助的。 我也一样,现在它运行就像一个魅力。 基本上都需要通过标准,否则分页只是完全搞砸添加主键中的顺序。

花4小时,将溶液那么简单和棘手。 在OpenJPA的2.2.2和Oracle 11g的作品,我猜是的,因为OpenJPA 1.2从后一个恒定的把戏。



文章来源: setFirstResult and setMaxResult doesn't work well with Order By