如何告诉JPA CriteriaBuilder按返回的唯一一列数据排序



我使用的是带有Hibernate 4.3.6.Final(MySQL 5.5)的JPA 2.1。在我的JPA CriteriaBuilder查询中,我唯一返回的列是一个最终计算为Integer的表达式。然而,我如何告诉JPA仅根据第一列对结果进行排序?我有…

    final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
    final CriteriaQuery<Integer> criteria = builder.createQuery(Integer.class);
    final Root<User> user = criteria.from(User.class);
    criteria.where(builder.and(builder.like(user.get(User_.userName), userNamePrefix + "%"),
                               builder.equal(user.get(User_.url), url)));
    criteria.select( builder.substring(user.get(User_.userName), userNamePrefix.length()).as(Integer.class) );
    criteria.orderBy( ??? );

我在"???"中放了什么来告诉JPA对返回的唯一一列数据进行排序?我意识到我可以获取所有列并使用Java进行排序,但我现在希望避免这种情况。

谢谢,-Dave

类似的东西

Expression selectedExpr = builder.substring(user.get(User_.userName);
criteria.select(selectedExpr, userNamePrefix.length()).as(Integer.class));
Order orderExpr = builder.asc(selectedExpr);
criteria.orderBy(orderExpr);

我最终使用criteriaBuilder为我构建了一个Order对象

criteria.orderBy(builder.asc(user.get(User_.userNmae)));

类似的问题和更详细的答案:JPA标准查询,类上的订单

最新更新