【问题标题】:Custom query in Spring RepositorySpring Repository 中的自定义查询
【发布时间】:2019-12-23 01:03:21
【问题描述】:

我创建了一个 SQL 查询:

select name, sum(amount) from cost inner join department where department.id = department_id group by department.name;

查询正常工作。我必须在我的 Spring Data 应用程序中将此工作查询用作本机查询,使用 @Query 注释,但它不起作用。

@Query(value = "select name, sum(amount) from cost inner join department where department.id = department_id group by department.name", nativeQuery = true)
    List <Cost> getGroupByDepartment();

我是否缺少使此查询与我的 Spring 应用程序一起使用的步骤?

【问题讨论】:

    标签: mysql spring jsp model-view-controller


    【解决方案1】:

    2 个选定字段无法在对象中正确定位成本

    有必要从表 Cost 中选择 所有 字段 (*),因为结果集应该适合 List&lt;Cost&gt; 或为结果创建一个新对象有 2 个字段:namesum_amount

    已更新。

    也许是这样:

    @Query(value = "select name, sum(amount) from cost inner join department where department.id = department_id group by department.name", nativeQuery = true)
        List <Object[]> getGroupByDepartment();
    

    然后进行数据处理

    List<Object[]> resultList = yourRepository.getGroupByDepartment();
    ...
            for (int i = 0; i < operationList.size(); i++) {
                Object field1 = resultList.get(i)[0];
                Object field2 = resultList.get(i)[1];
                System.out.println(field1+"="+field2);
    

    最好对字段使用适当的转换:

            String name = (String) operationList.get(i)[0];//name
            Integer sum = (Integer) operationList.get(i)[1];//sum(amount)
    

    【讨论】:

    • 我试过了:@Query(value = "select *, sum(amount) from cost group by department_id", nativeQuery = true) List getGroupByDepartment();现在我有错误:SELECT list 的表达式#1 不在 GROUP BY 子句中,并且包含非聚合列“app.cost.id”,它在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容。你知道怎么解决吗?
    猜你喜欢
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2020-05-11
    • 2020-04-12
    • 2015-12-07
    相关资源
    最近更新 更多