首頁 > Java > java教程 > 主體

如何使用聚合函數自訂JPA查詢的結果?

WBOY
發布: 2023-09-18 16:49:07
轉載
915 人瀏覽過

如何使用聚合函數自訂JPA查詢的結果?

大多數時候,當我們使用 JPA 查詢時,所得到的結果會對應到物件/特定資料類型。但是當我們在查詢中使用聚合函數時,處理結果有時需要我們自訂 JPA 查詢。

讓我們透過一個例子來理解(部門,員工)−

Dept.java

@Entity
public class Dept {
   @Id
   private Long id;
   private String name;
   @OneToMany(mappedBy = "dep")
   private List<Employee> emp;
   //Getters
   //Setters
}
登入後複製

一個部門可以有一名或多名員工,但一名員工只能屬於一個部門。

員工.java

@Entity
public class Employee {
   @Id
   private Long id;
   private Integer joiningyear;
   @ManyToOne
   private Dept dep;
   
   //Getters
   //Setters
}
登入後複製

現在,如果我們想取得入職日期以及按入職日期分組的員工人數,

@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
   // query methods
   @Query("SELECT e.joiningyear, COUNT(e.joiningyear) FROM Employee AS e GROUP BY e.joiningyear")
   List<Object[]> countEmployeesByJoiningYear();
}
登入後複製

上述查詢可以正常運作,但是以List的方式儲存值可能會導致錯誤。相反,我們可以自訂JPA查詢,將上述查詢的結果對應到一個Java類別中。這個Java類別只是一個簡單的POJO(Plain Old Java Object),不需要用@Entity來註解。

CountEmployees.java

的中文翻譯為:

CountEmployees.java

package com.tutorialspoint;
public class CountEmployees {
   private Integer joinyear;
   private Long totalEmp;
   
   public CountEmployees(Integer joinyear, Long totalEmp) {
      this.joinyear = joinyear;
      this.totalEmp = totalEmp;
   }
   //Getters
   //Setters
}
登入後複製

現在,我們可以自訂我們的JPA查詢,如下所示−

@Query("SELECT new com.tutorialspoint.CountEmployees(e.joiningyear, COUNT(e.joiningyear)) " + "FROM Employee AS e GROUP BY e.joiningyear")
List<CountEmployees> countEmployeesByJoining();
登入後複製

上述選擇查詢的結果將會對應到 CountEmployees 類別。透過這種方式,我們可以自訂 JPA 查詢並將結果對應到 java 類別。

以上是如何使用聚合函數自訂JPA查詢的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板