当前位置: 首页 > 知识库问答 >
问题:

如何更改Hibernate HQL查询输出的格式

齐航
2023-03-14

我正在用SpringDataJPA开发一个SpringBoot应用程序。我正在使用一个定制的JPQL查询来按某个字段分组并获取计数。以下是我的存储库方法。

@Query("SELECT v.status.name, count(v) as cnt FROM Pet v GROUP BY v.status.name")
List<Object[]> countByStatus();

其工作和结果如下所示:

[
    [
        "pending",
        1
    ],
    [
        "available",
        4
    ]
]

但是,我希望我的Restendpoint以如下格式的输出响应

{
    "pending": 1,
    "available": 4
}

我怎样才能做到这一点?

共有1个答案

燕照
2023-03-14

基本上,您希望生成一个JSON,其中其属性(“挂起”、“可用”)是动态的,并且来自SELECT v.status。名称查询的一部分。

创建一个DTO以保存行值:

package com.example.demo;

public class ResultDTO {

    private final String key;
    private final Long value;

    public ResultDTO(String key, Long value) {
        this.key = key;
        this.value = value;
    }

    public String getKey() {
        return key;
    }

    public Long getValue() {
        return value;
    }
}

更改查询以创建每行的新ResultTo:

@Query("SELECT new com.example.demo.ResultDTO(v.status.name, count(v)) as cnt FROM Pet v GROUP BY v.status.name")
List<ResultDTO> countByStatus();
  • “com.example.demo”是我的软件包,你应该把它改成你的

然后,您必须从服务类或控制器转换列表

final List<ResultDTO> repositoryResults = yourRepository.countByStatus();
final Map<String, Long> results = repositoryResults.stream().collect(Collectors.toMap(ResultDTO::getKey, ResultDTO::getValue));

您的控制器应该能够转换最终贴图

 类似资料:
  • 问题内容: 有没有一种简单的方法可以从Linux命令行运行MySQL查询并以CSV格式输出结果? 这是我现在正在做的事情: 当有很多列需​​要用引号引起来时,或者结果中有引号需要转义时,它将变得混乱。 问题答案: 从http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or- csv-file/ 使用此命令

  • 我使用的是flume的纯节点(测试)模式;我的水槽以如下方式启动: 水槽节点-1-c$FQDN':amqp(“exchangeName=[exchange name]”,“bindings=[binding name]””,“host=127.0.0.1”,“port=5672”,“userName=[user]”,”password=[pass]“,”exchangeType=direct“,”

  • 问题内容: 如何使用查询语句更改表名? 我使用以下语法,但在SQL Server 2005中找不到重命名关键字。 问题答案: 使用sp_rename: 您可以在MSDN上找到有关此过程的文档。 如果需要包括模式名称,则只能将其包含在第一个参数中(也就是说,不能将其用于将表从一个模式移动到另一个模式)。因此,例如,这是有效的:

  • 我使用最新版本的API平台,我想知道是否可以改变处理查询字符串中数组的方式。 默认行为依赖于PHP处理数组的方式: 根据Swagger文档:https://swagger.io/docs/specification/serialization/,它可以处理不同的方式: 使用API平台可以使用这种格式吗?我在选项中没有找到任何东西,我想我可以使用事件来“欺骗”它(也许是< code>Deserial

  • 问题内容: 我有一个表,像这样的数据: 表结果: 我需要涵盖以下所有方案的输出。 对于“审计”和“历史记录”字段应如何显示值有一条经验法则; 记录仅对于 原始帐户 应具有Audit =“ ADD”或“ CHANGE”&History =“ NEW”,“ BEFORE”或“ CURRENT” (这意味着表中的条目肯定从CurrNo = 1开始) 对于这种类型的帐户,记录不应该具有针对 迁移帐户的 A

  • 问题内容: 我正在处理项目,其中用户具有以常规格式存储的日期的数据库, 2013年3月8日 ,我想对输出进行日期排序。或将该日期字段转换为mysql查询中的时间戳 我想要这样的东西 但我知道这行不通…有没有出路 问题答案: 由于它不是日期,所以用于将字符串转换为日期 SQLFiddle演示