【问题标题】:How do I tell JPA CriteriaBuilder to order by the only column of data returned?如何告诉 JPA CriteriaBuilder 按返回的唯一数据列排序?
【发布时间】: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 进行排序,但我现在想避免这种情况。

谢谢,- 戴夫

【问题讨论】:

    标签: hibernate jpa sql-order-by jpa-2.1


    【解决方案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

      【讨论】:

        猜你喜欢
        • 2012-03-06
        • 1970-01-01
        • 2013-01-03
        • 1970-01-01
        • 1970-01-01
        • 2019-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多