[英]How do I group by date with QueryDsl?
我有一个实体,需要获取与时间无关的日期列表。 如何按日期分组?
@Entity
public class RssFeedEntry {
//...
@Column
@Temporal(TemporalType.TIMESTAMP)
private Date publishedDate;
//...
}
这样的查询将引发异常。
JPAQuery query = new JPAQuery(entityManager);
List<Tuple> list = query.
from(feedEntry).
groupBy(feedEntry.publishedDate.dayOfYear(), feedEntry.publishedDate.year()).
list(feedEntry.publishedDate.dayOfMonth(),
feedEntry.publishedDate.month(),
feedEntry.publishedDate.year());
堆栈跟踪:
Caused by: org.h2.jdbc.JdbcSQLException: Column "RSSFEEDENT0_.PUBLISHEDDATE" must be in the GROUP BY list; SQL statement:
谢谢。
据我所知,这是数据库限制。 除非仅在聚合函数(即max(),sum()等)中使用,否则select子句中的所有列都必须在group by子句中。 如果使用的不是MySQL,则不会出现这种问题。 据我所知,MySQL是唯一的数据库,在这个问题上,它不会使您退缩。
尝试这个:
List<Tuple> list = query.
from(feedEntry).
groupBy(feedEntry.publishedDate.dayOfMonth(),
feedEntry.publishedDate.month(),
feedEntry.publishedDate.year()).
list(feedEntry.publishedDate.dayOfMonth(),
feedEntry.publishedDate.month(),
feedEntry.publishedDate.year());
编辑:
不过,这将更加清晰:
List<Tuple> list = query.
from(feedEntry).
groupBy(feedEntry.publishedDate).
list(feedEntry.publishedDate);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.