Java持久性排序特殊情况-按所选状态优先

时间:2018-07-29 23:14:23

标签: jpa hibernate-jpa

我们使用Java Persistence作为数据库查询中的框架。我们在查询中使用CriteriaBuilder,CriteriaQuery,Predicate和Root。最近,有一个规则按状态对查询的交易记录进行排序,其中某些状态首先是字母,然后是其余状态。使用我们正在使用的样式容易做到这一点吗?

例如,所有可用状态为-已创建,已处理,待处理,已拒绝,已完成。

因此,在这种情况下,所有事务都由createdDate进行排序。...然后,必须按状态对同一createdDate的所有事务进行排序,所有状态首先为COMPLETED,然后为PENDING,其余状态则无需排序。对于具有相同createdDate的所有事务,只需要先完成,然后再等待。

我们正在使用Java 8,Hibernate-JPA 2.1

有什么建议吗?使用CriteriaBuilder在JPA样式查询中可以做到吗?谢谢。当前代码如下:

List<UserTransaction> userTransactionList = new ArrayList<UserTransaction>();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<UserTransaction> query = builder.createQuery(UserTransaction.class);
Root<UserTransaction> fromUserTransaction = query.from(UserTransaction.class);
List<Predicate> conditions = new ArrayList<>();
//...conditions are created here...
TypedQuery<UserTransaction> typedQuery = entityManager
    .createQuery(query.select(fromUserTransaction).where(conditions.toArray(new Predicate[] {}))
                        .orderBy(builder.desc(fromUserTransaction.get("createdDate"))));
userTransactionList = typedQuery.getResultList();

状态字段命名为状态。

0 个答案:

没有答案