春季数据JPA:如何执行聚合函数

时间:2018-12-18 21:05:15

标签: java mysql spring spring-data-jpa spring-data-jpa-datatables

我正在使用Spring Data JPA,并且有一个需要执行以下SQL查询的要求:

select key_1, sum(key_2), sum(key_3) from table_1 
where key_1 in ('1', '2') and {dynamic_columns} group by key_1;

对于动态列,我使用的是Spring Data JPA规范,但不确定如何在多个列上编写诸如sum()之类的聚合函数。

1 个答案:

答案 0 :(得分:0)

使用Spring Data JPA,您可以在Spring存储库中有一些选择。

参考: Baeldung - Spring data JPA Spring.io - Spring data JPA

指定本地查询

@Query(value="select key_1, sum(key_2) ...", nativeQuery=true)
Optional<Object[]> getAggregates;

使用提供程序(HQL用于休眠等查询语言)

@Query(value="select e.key_1, sum(e.key_2) from entity e ...")
Optional<Object[]> getAggregates;

您将在此处使用对象,因为您没有返回要添加自定义(汇总)列的特定实体。如果使用JPA存储库返回特定实体,则可以返回该实体而不是Object []。对象数组中的每个项目将对应于一列数据,如果您在此处使用多行,则可以使用:

Optional<List<Object[]>> getAggregates;

最后,如果尚未使用可选对象,则可以通过以下方式获取对象数组:

if(objectsOptional.isPresent()) {
    Objects[] objects = objectsOptional.get();
    ...
}

如果这不是您想要的,我将需要更多信息来帮助您。