java - 如何从 Spring Data JPA GROUP BY 查询返回对象列表而不是对象数组

标签 java spring hibernate jpa repository

我的问题与this thread有关.

以下是我使用某些字段进行分组的存储库方法:

@Query(value = "SELECT  t.test_id AS testId, COUNT(t.id) AS total FROM test_instances t GROUP BY t.test_id", nativeQuery = true)
public Object[] getTestStats();

运行成功,得到的结果如下:

[ [ 1, 2 ], [ 2, 1 ], [ 3, 2 ], [ 5, 1 ], [ 7, 2 ], [ 8, 1 ], [ 9, 1 ] ]

但是,当我从 Object[] 替换 getTestStats() 的返回类型时至List<?>我收到以下错误消息:

{
"cause": null,
"message": "Couldn't find PersistentEntity for type class [Ljava.lang.Object;!"]
}

我想使用List<?>因为如果它正常工作,我想使用自定义投影将其转换为,即 List<CustomProjection>

我尝试了以下返回类型 {List<?>, List<CustomProjection>, CustomProjection[]} ; 但每件事都返回相同的错误。希望有人能帮助我,先谢谢了。

最佳答案

如果你想返回一个列表,那么:

  1. 创建一个保存该字段的构造函数
  2. 在您的查询中,您可以创建一个包含此字段的对象。

例如:

 Select new com.CustomObject(t.test_id, COUNT(t.id))

在这种情况下,您可以使用 List<CustomObject>而不是对象数组

关于java - 如何从 Spring Data JPA GROUP BY 查询返回对象列表而不是对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58554165/

相关文章:

Spring session 与 hazelcast session 事件触发

java - Spring 4 websocket 和 stomp - 未到达 Controller

java - Tomcat 找不到 H2 内存数据库

java - 字符串中的单词-如何删除

java - 更改 spring root url 名称

java - 无法在 hibernate 5.1.x 中显示整个表

hibernate - 如果存在类似的行,如何避免创建新行?

java - 在 TextView 中打印版权符号

Java Logging 语句说找不到符号

java - 将 Set<T> 转换为 List<T> 的最简洁方法