我有以下查询,我想将其转换为Criteria API。因为我很新,所以我遇到了一些困难。 SQL语句如下:
SELECT
dayofweek(FROM_UNIXTIME(p.startTime / 1000)) as d,
count(*)
FROM persons p
GROUP BY dayofweek(FROM_UNIXTIME(p.startTime / 1000))
having d = 1
startTime是Date的长(毫秒)表示。 此外,在执行查询时,我将询问日期/月等数字值。所以对于星期一,我们假设day参数为'1'
如何使用Criteria API形成此查询?
现在我有以下内容:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Long> cq = cb.createQuery(Long.class);
Root<Person> root = cq.from(Person.class);
cq.select(cb.count(root));
Expression<Integer> expStartTime = root.get("startTime");
Expression<Integer> expConvertedTime = cb.function("day", Integer.class,
expStartTime);
cq.groupBy(root.get("startTime"));
cq.having(cb.equal(expConvertedTime, 1));