组标准API查询的结果按日期的日期部分

时间:2013-03-26 12:17:26

标签: jpa jpa-2.0 criteria-api

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

以下是多选查询

cq.multiselect(root.get(“id”),root.get(“recievedOn”));

其中recievedOn是日期列。我想基于日,周,月和年对groupBy进行分组。你能否建议如何做到这一点。

1 个答案:

答案 0 :(得分: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