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

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

Susan Sarandon
Susan Sarandon原创
2024-11-02 06:16:02710浏览

How to Return Custom Objects from Spring Data JPA GROUP BY Queries?

Spring Data JPA GROUP BY 查询中的自定义对象返回

简介


从 Spring Data JPA GROUP BY 查询中将数据作为自定义对象检索可增强数据呈现并简化进一步处理。本指南探讨了如何实现这一目标,展示了 JPQL 和本机查询的解决方案。

JPQL 查询


JPA 中的 JPQL 查询规范为返回自定义对象提供本机支持。

第 1 步:创建自定义 Bean>

定义一个简单的 Bean 类来表示所需的输出结构:

<code class="java">public class SurveyAnswerStatistics {
  private String answer;
  private Long cnt;

  // Constructor
}</code>

第 2 步:返回 Bean 实例


更新存储库方法以返回自定义 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();
}</code>

原生查询


虽然原生查询缺乏对 new 关键字的直接支持,但 Spring Data Projection 接口提供了一种替代方案解决方案:

第 1 步:定义投影接口

创建一个具有与所需输出对应的属性的投影接口: p>

<code class="java">public interface SurveyAnswerStatistics {
  String getAnswer();
  int getCnt();
}</code>

步骤 2:返回投影属性


更新存储库方法以返回投影属性:

<code class="java">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>

使用 SQL AS 关键字将结果字段无缝映射到投影属性。

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

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