【问题标题】:How to get data from raw query in spring boot?如何在 Spring Boot 中从原始查询中获取数据?
【发布时间】:2019-09-23 06:59:16
【问题描述】:

我有一个问题:

Query q = em.createNativeQuery("select DISTINCT id, rating, random() as ordering FROM table\n" +
                " WHERE id not in (1,2) ORDER BY ordering LIMIT 10");
List data = q.getResultList();

这个列表的每个元素都是像对象一样的数组:

我想检索那个“8”和“16”并组成一个逗号分隔的字符串(以后在“不在”部分的查询中使用它):

for (Object x : data) {
    System.out.println(Arrays.asList(x).get(0));
}

但它会产生字符串:

[Ljava.lang.Object;@ee93cd3
[Ljava.lang.Object;@62f3c3e1

我不知道如何获取这些 ID(“8”和“16”)

【问题讨论】:

  • 使用ResultTransformer将其映射到POJO

标签: java spring hibernate spring-boot


【解决方案1】:

1.我想这就是你要找的... Convert JPA query.getResultList() to MY Objects.

List<Object[]> rows = q.getResultList(); for (Object[] row : rows) { System.out.println(row[0]); } 

【讨论】:

  • thx,你的链接很有帮助,但是你的代码给了我编译错误正确的答案是: List rows = q.getResultList(); for (Object[] row : rows) { System.out.println(row[0]);您可以将其添加到您的答案中吗?
  • 您也应该将答案代码添加到此答案中,而不仅仅是链接
  • @Ganesan 有点像,但你的回答更简短,对来自谷歌的其他人有帮助)
【解决方案2】:

在这一行

List<Object[]> data = q.getResultList();

数据是表单对象的列表

[ [1,233, 0.000333], [1,233, 0.000333] ]

for (Object[] x : data) {
    // x is [1,233, 0.000333]
    System.out.println(x[0]);
}

【讨论】:

  • thx,但是这段代码给了我一个编译错误,无法转换为 BigInteger,我找到了正确的答案 List rows = q.getResultList(); for (Object[] row : rows) { System.out.println(row[0]); }
【解决方案3】:

如果我理解正确,您正在寻找以逗号分隔的 ID 字符串。 如果是这样,那么按照这些步骤可能会帮助您解决问题。

  1. 在表中创建一个只有一个参数 ID 的构造函数。 (如果你愿意,你也可以添加更多参数,但要确保你想要的值必须在构造函数和查询中。)

  2. 编写sql查询并执行。

  3. 它返回结果并将其收集到包含表对象的List中。

  4. 获取字符串

dataList.stream().map(obj -> obj.getId()).collect(Collectors.joining(", "))

这将为您提供逗号分隔的字符串。

【讨论】:

    猜你喜欢
    • 2019-08-15
    • 2016-09-14
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 1970-01-01
    • 2019-02-20
    • 2020-08-02
    相关资源
    最近更新 更多