在 Criteria API 中,我必须根据查询中返回的日期列的日期部分对查询结果进行分组。你能建议如何做到这一点吗?
以下是多选查询
cq.multiselect(root.get("id"), root.get("recievedOn")) ;
其中 recievedOn 是日期列。我想根据日、周、月和年对查询进行分组。你能建议如何做到这一点。
在 Criteria API 中,我必须根据查询中返回的日期列的日期部分对查询结果进行分组。你能建议如何做到这一点吗?
以下是多选查询
cq.multiselect(root.get("id"), root.get("recievedOn")) ;
其中 recievedOn 是日期列。我想根据日、周、月和年对查询进行分组。你能建议如何做到这一点。
如果您使用 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