【发布时间】:2013-03-16 05:42:17
【问题描述】:
在 Criteria API 中,我必须根据查询中返回的日期列的日期部分对查询结果进行分组。你能建议如何做到这一点吗?
以下是多选查询
cq.multiselect(root.get("id"), root.get("recievedOn")) ;
receivedOn 是日期列。我想根据日、周、月和年对查询进行分组。您能否建议如何执行此操作。
【问题讨论】:
标签: jpa jpa-2.0 criteria-api
在 Criteria API 中,我必须根据查询中返回的日期列的日期部分对查询结果进行分组。你能建议如何做到这一点吗?
以下是多选查询
cq.multiselect(root.get("id"), root.get("recievedOn")) ;
receivedOn 是日期列。我想根据日、周、月和年对查询进行分组。您能否建议如何执行此操作。
【问题讨论】:
标签: jpa jpa-2.0 criteria-api
如果您使用 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 结合起来以获得额外的功能支持,
或者你可以使用 JPQL,它有更多的扩展,
http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/j_extract.htm#extract
【讨论】: