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

如何使用 JPA 存储库转换来自查询的数据

张逸清
2023-03-14

我有一个似乎工作正常的查询。

public interface GameRepository extends JpaRepository<Game,Integer> {
@Query(value="SELECT Cast(bifnb as varchar) bifnb , count(*) FROM (SELECT  count(fk_game) as nb FROM public.game INNER JOIN score s on game.id_game = s.fk_game WHERE fk_board_game = 2014 GROUP BY fk_game) as bifnb group by bifnb", nativeQuery = true)
List<StatisticDto> nbplayer();

}

但是当我尝试将它与JPA一起使用并键入统计DTO时,我得到了以下错误:

具有路径 [/api] 抛出的异常的上下文 [请求处理失败; 嵌套异常是组织.springframework.core.convert.converter不常见: 找不到能够从类型 [org.springframework.data.jpa.repository.query.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] 转换为具有根本原因的类型 [****.statistics.payload.StatisticDto]] 并具有根本原因

所以我尝试使用相同的查询和:列表

它可以工作,但我不知道如何使用列表,我更喜欢使用统计数据。


共有1个答案

翟青青
2023-03-14
匿名用户

假设统计DTO如下所示:

public class StatisticDTO {
   private String key;
   private Integer value;
   // ... getter/setter
}

此查询应该可以工作:

@Query(value="SELECT Cast(bifnb as varchar) as \"key\" , count(*) as \"value\" FROM (SELECT  count(fk_game) as nb FROM public.game INNER JOIN score s on game.id_game = s.fk_game WHERE fk_board_game = 2014 GROUP BY fk_game) as bifnb group by bifnb", nativeQuery = true)
List<StatisticDto> nbplayer();

有关更多信息,请参阅这篇关于将结果转换为DTO的文章。

我引用别名是因为我认为< code>key和< code>value是特殊的关键字。

 类似资料:
  • 问题内容: 我想通过注释@Query通过Jpa存储库进行Join查询。我有三个表。 本机查询是: 现在我有了Table Hibernate实体,所以我在ApplicationRepository中尝试过 日志说 意外的标记 有什么想法吗? 我的表实体 Application.java: Customer.java: User.java: 问题答案: 您不需要JPA中的ON子句,因为借助映射注释,J

  • 问题内容: 我想使用带有注释@Query的Jpa存储库进行Join查询。 我有两个表: 和: 本机查询是: 现在我有一个表休眠实体用户和区域 所以我尝试了UserRespository 日志说: 意外的标记: 有什么主意吗? 我的表实体 问题答案: 您遇到此问题的原因有两个。 JPQL查询无效。 您尚未在基础JPQL查询可以利用的实体之间创建关联。 在JPQL中执行联接时,必须确保尝试联接的实体之

  • 本机查询为: 现在我有了表Hibernate实体,所以我在ApplicationRepository中尝试了 日志上说

  • 使用Spring Boot应用程序。我有一个类UserService,我在其中创建了一个动态查询,根据请求参数具有多个or条件: 我有UserRepository接口,我需要执行这个查询。到目前为止,我使用了findById等JPA函数或@Query(“从事件中选择id”)。 如何将此查询从服务类传递到存储库并执行它?

  • 我想从JPA存储库中创建一个流。目标是将来自回购的实体(可能超过一百万)映射到其他实体,这些实体将依次存储在另一个回购中。 到目前为止,我构建了一个收集器,它将收集给定数量(例如1000)实体,然后将其存储到目标存储库中。这将在并行流中工作。我现在需要的是一种从源存储库中提取实体并在需要时将它们馈送到流中的好方法。 到目前为止,最有希望的是实现供应商(http://docs.oracle.com/

  • 我试图使用JPA继承来表示这些。 nnm\U tran实体 便宜货实体 我认为到目前为止,这一切都连接正确。当我使用自定义查询附加Spring数据存储库时,我的问题就来了。 存储库 当代理该方法并执行该方法时,它会生成SQL语句,选择不同的nnm\U tran。nnm\U tran t1 LEFT OUTER JOIN io\U plan t0 ON(t1.plan\U number=t0.pla