【问题标题】:Spring Data JPA custom count query not showing all recordsSpring Data JPA 自定义计数查询未显示所有记录
【发布时间】:2020-11-21 08:18:29
【问题描述】:

查询没有返回所有记录,即所有计数相同的记录都被返回。 MYSQL 工作台的相同代码的工作方式就像一个魅力

JPA 自定义查询

public interface BookingRepository extends JpaRepository<Booking, Long> {

    @Query("select count(v.source), concat(v.source,'-', v.destination) as bus_route from Booking v group by v.source, v.destination")
    public List<Object[]> groupByBus();
}

在 MYSQL 中查询

SELECT count(source), concat(source," - ", destination) as bus_route
FROM booking
GROUP BY source, destination;

如您所见,有两条记录计数为 1,但 Spring 数据 jpa 仅返回一条记录

【问题讨论】:

  • 只需将返回类型从List&lt;Object[]&gt;更改为List&lt;Map&lt;String, Object&gt;&gt;

标签: spring-boot spring-data-jpa


【解决方案1】:

您的查询返回List&lt;Object[]&gt;,但对象数组几乎可以是所有内容。

实际上,Object[] 对于每个位置都包含另一个 Object[],具有两个值:countbus_route

您可以通过这种方式迭代每个值(我已经测试过,我需要 BigInteger 来转换对象值):

Map<BigInteger,String> map = new HashMap<BigInteger,String>();
for(Object object[] : objectList) map.put((BigInteger)object[0], (String)object[1]);

你会得到你想要的地图。

另外,如果可能有重复值,只创建一个新列表而不是Map

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-25
    • 2015-12-07
    • 2012-09-13
    • 2019-03-10
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2020-02-11
    相关资源
    最近更新 更多