java - 如何在 JPA 中使用 TypedQuery 更改顺序

标签 java hibernate jpa cxf jpql

我希望在 FIQL 支持下实现分页。 我在 JPA(Hibernate) 中使用 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 字段降序排序。我怎样才能做到这一点?

最佳答案

我可以使用 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();

关于java - 如何在 JPA 中使用 TypedQuery 更改顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51065926/

相关文章:

Java 使用 AES 256 和 128 对称 key 加密

hibernate - 修复 Hibernate 的警告

java - 从检索 jasper 报告中两个实体的查询中获取值

java - 没有合适的司机。尝试使用 Hibernate 连接到 Heroku 上的 postgresql 数据库

java - Hibernate Criteria Query Join with Null 值

java - 如何使用 JPA 在数据库中保存相似数据的映射

java - 从 SQL 脚本生成带有 JPA 注释的 Java 类

java - QueryDSL 重复标识变量/相等语法错误与任何设置?

java - 使用Callable代替Supplier,反之亦然

java - Android MobileAds 加载广告时间过长