我希望在FIQL支持下实现分页。 我正在使用带有JPA(休眠)的apache cxf。 这是为此示例提供的示例http://cxf.apache.org/docs/jax-rs-search.html#JAX-RSSearch-JPA2.0
SearchConditionVisitor<Order, TypedQuery<Order>> visitor
= new JPATypedQueryVisitor<>(em, Order.class);
// connect FIQL cxf SearchCondition with our JPA visitor
searchCondition.accept(visitor);
// creeate JPA specific TypedQuery by our visitor
TypedQuery<Order> typedQuery = visitor.getQuery();
typedQuery.setFirstResult((page * perPage) - perPage);
typedQuery.setMaxResults(perPage);
// Run the query and return matching a complex FIQL criteria
return typedQuery.getResultList();
每件事看起来都很有效,包括搜索和分页。 它看起来没有从生成sql日志中使用的order by子句,并且似乎遵循数据库插入顺序。 现在,我希望更改默认的排序顺序。例如,我希望按降序对“订单ID”字段进行排序。我该如何实现?
答案 0 :(得分:1)
我可以使用CriteriaQuery使其工作。
JPACriteriaQueryVisitor<Order, Order> jpa
= new JPACriteriaQueryVisitor<>(em, Order.class, Order.class);
searchCondition.accept(jpa);
CriteriaQuery<Order> cq = jpa.getCriteriaQuery();
CriteriaBuilder cb = em.getCriteriaBuilder();
Root<Order> root = (Root<Order>) cq.getRoots().iterator().next();
cq.orderBy(cb.desc(root.get("id")));
TypedQuery<Order> query = jpa.getTypedQuery();
query.setFirstResult((page * perPage) - perPage);
query.setMaxResults(perPage);
return query.getResultList();
答案 1 :(得分:0)
创建查询后,您无法更改顺序。
如果使用MySQL,则也许可以在ORDER BY :colnum DESC
中使用整数参数来指定进行排序的列号(仅从所选列的1开始),但是您不能改变方向。
PostgreSQL不允许您这样做。不过,我不知道其他数据库上的情况如何。在MySQL中,参数由SQL Driver代替,因此它始终接收带有转义序列的完整查询。使用PG,查询首先由服务器解析,创建执行计划(包括是否以及如何订购结果),然后发送参数。