Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA QueryDSL计数汇总(按天)_Java_Mysql_Hibernate_Jpa_Querydsl - Fatal编程技术网

Java JPA QueryDSL计数汇总(按天)

Java JPA QueryDSL计数汇总(按天),java,mysql,hibernate,jpa,querydsl,Java,Mysql,Hibernate,Jpa,Querydsl,我有这个Sql查询。它返回每天生成的事件数 SELECT DATE_FORMAT(`timestamp`, "%y-%m-%d") AS date , COUNT(*) FROM `Event` WHERE `active`=1 GROUP BY date 输出 | date | Count | ------------------------ | 14-09-29 | 1 | | 14-11-02 | 1 | | 14-11-0

我有这个Sql查询。它返回每天生成的事件数

SELECT DATE_FORMAT(`timestamp`, "%y-%m-%d") AS date , COUNT(*) 
FROM `Event` 
WHERE `active`=1 
GROUP BY date
输出

 |   date   |   Count   |
 ------------------------
 | 14-09-29 |     1     |
 | 14-11-02 |     1     |
 | 14-11-03 |     3     | 
     ...         ...
我想在JPA QueryDSL上执行此查询,但我不知道如何执行此查询,因为我还没有找到将
DATE\u格式(“timestamp',%y-%m-%d”)作为日期执行的方法

是否可以在JPA QueryDSL上执行此查询,或者受限制无法执行此查询

谢谢。

您可以使用将计算列添加到实体中,然后在QueryDSL调用中使用计算列

public class MyEntity {
...
  @Formula('DATE_FORMAT(`timestamp`, "%y-%m-%d")')
  String myDatStr;
...
}

最后我用这个查询来解决它。我还添加了日期范围过滤器

 QEvent qEvent = QEvent.event;

 JPAQuery query = new JPAQuery(entityManager);

 return query.from(qEvent)
                 .where(qEvent.active.eq(true)
                    .and(qEvent.sensorId.equalsIgnoreCase(sensorId)
                    .and(qEvent.timestamp.after(rangeStart)
                    .and(qEvent.timestamp.before(rangeEnd)))))
             .groupBy(qEvent.timestamp.dayOfYear())
             .list(new QTuple(qEvent.timestamp, Wildcard.count));

谢谢你的帮助。

在这种情况下不起作用。最后,我找到了一个满足我需要的查询。无论如何,谢谢你:这个解决方案可能不是完整的JPA,但在JPAQuery中使用带有日期的表达式是唯一可行的方法。在我的例子中,我想要两个日期的月份之间的差异。我就是这样用的<代码>@Formula(“四舍五入(月之间)(TRUNC(DATE_B,'MONTH')、TRUNC(DATA_A,'MONTH'))、0)”字符串myDatStr