大多數時候,當我們使用 JPA 查詢時,所得到的結果會對應到物件/特定資料類型。但是當我們在查詢中使用聚合函數時,處理結果有時需要我們自訂 JPA 查詢。
讓我們透過一個例子來理解(部門,員工)−
@Entity public class Dept { @Id private Long id; private String name; @OneToMany(mappedBy = "dep") private List<Employee> emp; //Getters //Setters }
一個部門可以有一名或多名員工,但一名員工只能屬於一個部門。
@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
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中文網其他相關文章!