我有一Student堂課。
@Entity
public class Student {
private long id;
private String name;
private String department;
private String subDepartment;
private int marks;
//getters, setters and constructors.
}
我希望能夠得到按department然后分組的最小、最大和平均分數subDepartment。
我的存盤庫:
public class StudentRepository extends JpaRepository<Student,Long> {
@Query("Select s.department, s.subDepartment , min(marks), max(marks), avg(marks) from Student as s groupby s.department, s.subDepartment")
List<Object[]> getStatsByDepartmentAndSubDepartment()
}
當然,這可行,但我想避免使用List<Object[]>,而是得到類似的東西:
Map<String, Map<String,Stats>> class
其中第一個鍵是Department,第二個鍵是subDepartment,并且Stats類封裝了 min,max,average
有沒有辦法做到這一點Spring JPA.?我檢查了嵌套類是不可能的。
怎么樣Hibernate或任何其他解決方案?我是新手Hibernate。
我正在使用Spring boot并且可以添加任何需要的依賴項。任何資料庫都可以,即使H2是一開始。
uj5u.com熱心網友回復:
您不能歸還地圖。您可以使用類 DTO 轉換行。
帶建構式的 DTO 類
您還可以創建一個類 DTO:
class StudentDTO {
public StudentDTO(String dep, String subDep, Integer min, Integer max, Double avg ) {
this.stats = new Stats(min, max, avg);
...
}
}
然后在 select 子句中呼叫它:
select new StudentDTO(s.department, s.subDepartment, avg(s.marks), ...) from ...
這將回傳一個List<StudentDTO>. 只要建構式匹配 select 子句,它就可以正常作業。
介面 DTO
您也可以使用介面定義 DTO,但如果您有嵌套類,我認為它不起作用。
不過,這將起作用:
interface StudentViev {
String getDepartment();
String getSubdepartment();
Integer getMinMark();
Integer getMaxMark();
Double getAvgMark();
}
現在您可以將其用作串列的型別:
@Query("Select s.department as department, s.subDepartment as subDepartment, min(marks) as minMark, max(marks) as maxMark, avg(marks) as avgMark from Student as s groupby s.department, s.subDepartment")
List<StudentView> getStatsByDepartmentAndSubDepartment()
請注意,我在選擇子句中使用了別名,以便回傳的列名與介面中的 getter 匹配
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/495689.html
上一篇:按條件搜索繼承物體
下一篇:創建Bean控制器和存盤庫時出錯
