java - 引用条件查询中较早的别名字段

标签 java hibernate jpa criteria jpa-2.0

在这个查询中:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Tuple> q = cb.createTupleQuery();

// FROM GamePlayedEvent gpe
Root<GamePlayedEvent> gpe = q.from(GamePlayedEvent.class);
// SELECT gameId, COUNT(*) AS count, AVG(duration)
// AS avDur, AVG(rewardCurrency) AS avCur, AVG(rewardXP) avXp
q.select(cb.tuple(
    gpe.<String>get("gameId"),
    cb.count(gpe).alias("count"),
    cb.avg(gpe.<Double>get("duration")).alias("avDur"),
    cb.avg(gpe.<Integer>get("rewardCurrency")).alias("avCur"),
    cb.avg(gpe.<Integer>get("rewardXp")).alias("avXp")
));
// WHERE loginTime BETWEEN ...
q.where(cb.between(gpe.<Date>get("time"), fromTime, toTime));
// GROUP BY gameId
q.groupBy(gpe.<String>get("gameId"));
// ORDER BY count DESC
q.orderBy(cb.desc(???));

如何添加 ORDER BY count DESC,引用 SELECT 子句中定义的“count”?

最佳答案

如果您只是捕获计数表达式并直接使用它呢?

Expression event_count = cb.count(gpe);

q.select(cb.tuple( 
  gpe.<String>get("gameId"), 
  event_count,
  ... 
)); 

q.orderBy(cb.desc(event_count));

关于java - 引用条件查询中较早的别名字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4554695/

相关文章:

Java AbstractQueuedSynchronizer 与自定义 FutureTask 的自定义同步?

java - 如何使用hibernate工具生成JPA标准中的POJO类?

java - Hibernate 在调用 saveOrUpdate 时执行不需要的 SELECT

JavaEE 7 : CDI+OSGI - one real example

java - 如何以对未闭合的双引号字符具有鲁棒性的方式解析大型 CSV 文件?

java - 在 JPA 查询上设置 ORDER BY 和 LIMIT 子句

hibernate - 使用 Spring Boot 2.1+ 为 Hibernate 配置缓存

mysql - Hibernate不创建新表

java - 使用 JPA 插入数据后应用程序不会终止

jpa - @GeneratedValue 与 TABLE 策略的含义