【问题标题】:spring data JPA: How to execute aggregate functionsspring data JPA:如何执行聚合函数
【发布时间】:2018-12-18 21:05:15
【问题描述】:

我正在使用 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() 等聚合函数。

【问题讨论】:

    标签: java mysql spring spring-data-jpa


    【解决方案1】:

    使用 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();
        ...
    }
    

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

    【讨论】:

    • 感谢您花时间提供帮助。上述选项在我的情况下无效,因为 where 子句是基于条件的。为了生成 where 子句,我使用的是 Spring-Data-JPA 规范,但似乎不支持聚合函数。
    • Object[] 提示(或 Kotlin 中的 Any[])是我需要的提示。
    猜你喜欢
    • 2021-11-02
    • 2021-11-10
    • 2013-02-05
    • 2019-02-20
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多