如何告诉 JPA CriteriaBuilder 按返回的唯一数据列排序?
Posted
技术标签:
【中文标题】如何告诉 JPA CriteriaBuilder 按返回的唯一数据列排序?【英文标题】:How do I tell JPA CriteriaBuilder to order by the only column of data returned? 【发布时间】:2014-11-11 16:15:12 【问题描述】:我正在使用 JPA 2.1 和 Hibernate 4.3.6.Final (mysql 5.5)。在我的 JPA CriteriaBuilder 查询中,我返回的唯一列是最终计算结果为整数的表达式。但是,我如何告诉 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 进行排序,但我现在想避免这种情况。
谢谢,- 戴夫
【问题讨论】:
【参考方案1】:类似
Expression selectedExpr = builder.substring(user.get(User_.userName);
criteria.select(selectedExpr, userNamePrefix.length()).as(Integer.class));
Order orderExpr = builder.asc(selectedExpr);
criteria.orderBy(orderExpr);
【讨论】:
【参考方案2】:我最终使用 criteriaBuilder 为我构建了一个 Order 对象。即
criteria.orderBy(builder.asc(user.get(User_.userNmae)));
类似的问题和更详细的答案:JPA criteria query, order on class
【讨论】:
以上是关于如何告诉 JPA CriteriaBuilder 按返回的唯一数据列排序?的主要内容,如果未能解决你的问题,请参考以下文章
JPA / Hibernate:CriteriaBuilder - 如何使用关系对象创建查询?
如何在 JPA Criteriabuilder Select 语句中执行子查询?