gpt4 book ai didi

java - 如何使用 QueryDsl 按日期分组?

转载 作者:行者123 更新时间:2023-11-30 03:40:36 25 4
gpt4 key购买 nike

我有一个实体,需要获取日期列表,无论时间如何。如何按日期分组?

@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:

谢谢。

最佳答案

据我所知,这是数据库限制。 select 子句中的所有列都必须位于 group by 子句中,除非它仅在聚合函数中使用(即 max()、sum() 等)。如果您使用 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);

关于java - 如何使用 QueryDsl 按日期分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26889953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com