我对再次休眠还是很陌生,所以这可能是一个愚蠢的问题;)。
没有 to_days,但按时间戳聚集,它的工作方式如下:
CriteriaQuery<Tuple> query = criteriaBuilder.createQuery(Tuple.class);
Root<Session> sessionRoot = query.from(Session.class);
query.multiselect(
sessionRoot.get("time").alias("time"),
criteriaBuilder.count(sessionRoot).alias("count")
);
query.groupBy(sessionRoot.get("time"));
List<Tuple> results = this.executeQuery(query);
所以我收到:
time|count
13721938721|1
13721938722|2
13721938723|3
13721938724|4
13721938725|2
13721938726|1
13721938727|4
但这都是每毫秒的会话计数,但我需要按天而不是按时间戳聚集的那些:因此我在普通 mysql 中使用 to_days。
在 mysql 我执行这个查询:
SELECT TO_DAYS(`time`) AS `days`, COUNT(*) as `count` FROM sessions WHERE 1 GROUP BY `days`
这给了我:
days|count
777594|123
777595|60
777596|61
777597|74
但我还不知道:如何在休眠中使用 javax.persistence.criteria.CriteriaBuilder 和 CriteriaQuery 实现相同的目标?