[英]spring data JPA: How to execute aggregate functions
I am using Spring Data JPA and I have a requirement where I need to execute the SQL query as below:我正在使用 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;
For dynamic columns, I am using Spring Data JPA Specifications but I am not sure how can I write the aggregate functions like sum() on multiple columns.对于动态列,我使用的是 Spring Data JPA 规范,但我不确定如何在多列上编写 sum() 等聚合函数。
With Spring Data JPA you have a few options in a spring repository.使用 Spring Data JPA,您在 spring 存储库中有几个选项。
References: Baeldung - Spring data JPA Spring.io - Spring data JPA参考资料: Baeldung - Spring 数据 JPA Spring.io - Spring 数据 JPA
Specify a native query指定本机查询
@Query(value="select key_1, sum(key_2) ...", nativeQuery=true)
Optional<Object[]> getAggregates;
Use the providers (HQL for hibernate etc. query language)使用提供者(HQL 用于休眠等查询语言)
@Query(value="select e.key_1, sum(e.key_2) from entity e ...")
Optional<Object[]> getAggregates;
You'll use objects here because you are not returning a specific entity you are adding custom (aggregate) columns.您将在此处使用对象,因为您不会返回正在添加自定义(聚合)列的特定实体。 If you were returning a specific entity with a JPA repository you could return that entity instead of Object[].
如果您使用 JPA 存储库返回特定实体,则可以返回该实体而不是 Object[]。 Each item inside the object array will correspond to a columnof data, if you had multiple rows here you would use:
对象数组中的每一项都对应一列数据,如果这里有多行,则可以使用:
Optional<List<Object[]>> getAggregates;
Finally, if you have not used optionals before you will get your object array by:最后,如果您之前没有使用过可选项,您将通过以下方式获取对象数组:
if(objectsOptional.isPresent()) {
Objects[] objects = objectsOptional.get();
...
}
If this isn't what you were looking for i'll need more information to help you out.如果这不是您要查找的内容,我将需要更多信息来帮助您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.