当前位置: 首页 > 面试题库 >

Spring数据返回列表

和嘉澍
2023-03-14
问题内容

我有这个存储库:

@Repository
public interface ProductRepository extends JpaRepository<Product, Long>{

@Query("SELECT p.textToSearch as text, count(*) as counter FROM Product p GROUP BY text_to_search ORDER BY counter DESC")
List<TopProductDTO> findTopProducts();
}

其中TopProductDTO类为:

public class TopProductDTO {

public TopProductDTO() {}

private String text;
private Integer counter;

// Getters and Setters are omited
}

但是当我执行代码时

List<TopProductDTO> topProducts = productRepository.findTopProducts();

它返回一个

List<Object[]> insted a List<TopProductDTO>

就像每一列都是列表中对象数组的索引一样……难道不是Spring
Data会将查询的’text’和’counter’列与TopProductDTO中的字段绑定在一起吗?

结果我在Thymeleaf模板中遇到了这个错误:

00:37:22.659 [http-nio-8080-exec-5] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "topProductDTO.text" (products/top:46)] with root cause
org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 14): Property or field 'text' cannot be found on object of type 'java.lang.Object[]' - maybe not public?

我正在使用Spring Boot 1.3.3和Postgres 9.2


问题答案:

尝试使用DTO的构造函数。

声明一个新的构造函数

public TopProductDTO(String text, Integer count) {
    this.text = text;
    this.count = count;
}

在查询中使用新的构造函数

@Query("SELECT new TopProductDTO(p.textToSearch, count(id))FROM Product p GROUP BY text_to_search ORDER BY counter DESC")
List<TopProductDTO> findTopProducts();
}

使用课程的全限定名。



 类似资料:
  • 我需要在Spring数据中实现一个查询,如下所示:- 我的测试方法:- 我得到以下异常:- org.springframework.core.convert.conversionFailedException:未能将值“{TEST,5.0}”的类型[java.lang.object[]]转换为类型[com.mycomp.myobj];嵌套异常是org.springframework.core.co

  • 我有这样的查询,我想从中提取电影标题及其评级 但此列表显然不能存储具有2个值的结果集 在了解它之后,我发现例如这个链接Spring Data: JPA repository findAll()返回*Map而不是List?但我似乎不清楚它们的实现。 我不明白他们从哪里得到第一个链接中的长值 我如何创建我的地图? 电影类: 评级等级:

  • 我有一个带有嵌入Id的类。当我尝试使用Jpa存储库进行搜索时,它只返回一个空对象。问题似乎出在嵌入式Id中,因为我用一个没有这个Id的类进行了测试,结果很好。 当我针对数据库进行测试时,JPA在控制台中输出的查询工作正常。 并且没有输出错误。 编辑:数据库中有数据 EDIT2:添加了equals和hashcode。 编辑3:findAll方法有效。 实体 嵌入ID 存储库 服务 正如你所看到的,我

  • null 但是,每当我尝试将turbine添加到这个堆栈时,/turbine.stream只返回在浏览器上重复执行,结果Hystrix仪表板显示 有人能帮我找出哪里出了问题吗? 以下是我对涡轮的关键配置。TurbineAppliation类只是一个带有@enableTurbineStream的springboot应用程序,所以下面没有列出它。

  • 问题内容: 使用on_change回调,我可以在Bokeh中获取DataTable中所选内容的数字行索引。是否可以:a)获取列索引b)获取索引值(列标题和行标题) 示例代码: 这给出了以下内容,它们可以返回行以及选择中的值。如果我总是希望返回单个列,则这是理想的。但是,选择UI(虚线)似乎表明特定的列是已知的,而不仅仅是行。如果无法获得选定的列,我可以同时使用行索引和单元格值来查找它吗? 本地服务

  • 上下文:Spring data cassandra官方1.0.2。Maven Central repo,CQL3、cassandra 2.0、datastax driver 2.0.4发布 我们非常欢迎帮助修复这个问题。 同时,看起来我必须将Base64的二进制数据编码/解码到文本数据类型列。 ---这是我使用的简单表CQL元数据----------- [主]信息org.spring.cassan

  • PostgreSQL提供了从DML语句返回数据的简洁方法,请参见https://www.PostgreSQL L.org/docs/current/DML-returning.html 我试图实现的是类似以下片段的东西 若要检索已删除的行,请执行以下操作。但是,这会导致以下异常 Spring Data JDBC声明修改查询只能返回void、int和boolean,请参见https://docs.S

  • 我使用mysql存储过程来检索对象列表。这可能吗? 我在看这篇文章 问题: > 如何使用结果集检索select语句中的对象列表? 如何将结果集映射到对象列表? CREATE DEFINER=@PROCEDURE(ININT,OUTINT,OUTINT,OUTVARCHAR(50),OUTVARCHAR(50),OUTFLOAT 内部连接(从rate中选择aid,r.rate,re.country_