我使用的是带有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标准查询,类上的订单