簡體   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