繁体   English   中英

如何使用QueryDsl按日期分组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM