首页 >Java >java教程 >如何从 Spring Data JPA GROUP BY 查询返回自定义对象?

如何从 Spring Data JPA GROUP BY 查询返回自定义对象?

Susan Sarandon
Susan Sarandon原创
2024-11-01 08:51:30685浏览

How to Return a Custom Object from a Spring Data JPA GROUP BY Query?

如何从 Spring Data JPA GROUP BY 查询返回自定义对象

使用 Spring Data JPA 执行复杂查询时,有必要返回自定义对象,而不是返回自定义对象默认实体。其中一种场景涉及按特定字段对结果进行分组并检索每组的计数。本文将探讨实现此目的的两种方法:一种用于 JPQL 查询,另一种用于本机查询。

JPQL 查询解决方案

JPQL 提供使用 new 关键字返回自定义对象的本机支持。其实现方式如下:

  1. 定义一个简单的 Bean 类来表示所需的数据结构。
  2. 从存储库方法返回此 Bean 类的实例。
<code class="java">public interface SurveyRepository extends CrudRepository<Survey, Long> {
    @Query("SELECT new com.path.to.SurveyAnswerStatistics(v.answer, COUNT(v)) FROM Survey v GROUP BY v.answer")
    List<SurveyAnswerStatistics> findSurveyCount();
}

public class SurveyAnswerStatistics {
    private String answer;
    private Long cnt;
    // getters and setters here
}</code>

原生查询的解决方案

原生查询不支持new关键字。相反,请使用 Spring Data 投影接口:

  1. 定义具有所需属性的投影接口。
  2. 从查询返回投影属性。
<code class="java">public interface SurveyAnswerStatistics {
    String getAnswer();
    int getCnt();
}

public interface SurveyRepository extends CrudRepository<Survey, Long> {
    @Query(nativeQuery = true, value = "SELECT v.answer AS answer, COUNT(v) AS cnt FROM Survey v GROUP BY v.answer")
    List<SurveyAnswerStatistics> findSurveyCount();
}</code>

重要提示:

  • 确保 JPQL 查询的完全限定路径和 new 关键字的使用。
  • 使用 SQL 的 AS 关键字来映射结果字段原生查询中的投影接口。

以上是如何从 Spring Data JPA GROUP BY 查询返回自定义对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn