0

在 Criteria API 中,我必须根据查询中返回的日期列的日期部分对查询结果进行分组。你能建议如何做到这一点吗?

以下是多选查询

cq.multiselect(root.get("id"), root.get("recievedOn")) ;

其中 recievedOn 是日期列。我想根据日、周、月和年对查询进行分组。你能建议如何做到这一点。

4

1 回答 1

0

如果您使用 GROUP BY,那么您只能按分组依据的字段进行选择,或者应用聚合函数(count/min/max/etc),所以我不确定您要做什么?

按日期分组很容易,但如果您只想按日期的特定部分分组,则需要使用函数。Criteria API 没有定义任何日期函数,但您可以使用 function() API 来调用特定的数据库函数。

见, http ://en.wikibooks.org/wiki/Java_Persistence/Criteria#Group_By

http://en.wikibooks.org/wiki/Java_Persistence/Criteria#Criteria_API_special_functions

如果您使用的是 EclipseLink,您还可以将 Expression 对象与 Criteria 结合起来以获得额外的功能支持,

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/Criteria#JpaCriteriaBuilder_and_EclipseLink_Extensions

或者你可以使用 JPQL,它有更多的扩展,

http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/j_extract.htm#extract

于 2013-03-26T13:36:06.843 回答