emp;//Getters//Setters}一個部門"/> emp;//Getters//Setters}一個部門">

首頁  >  文章  >  Java  >  如何使用聚合函數自訂JPA查詢的結果?

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

WBOY
WBOY轉載
2023-09-18 16:49:07889瀏覽

如何使用聚合函數自訂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刪除