I've done this Custom object from JPA with GROUP BY query and multiple counts with one SQL query
The following two methods findLaptopTotalQty
and findLaptopQtySummary
working perfectly
@Query("SELECT "
+ "new com.path.to.LaptopModelCount"
+ "(l.laptopModel AS laptopModel, COUNT(l.laptopModel) AS qty) "
+ "FROM Laptop l "
+ "GROUP by l.laptopModel")
Page<LaptopModelCount> findLaptopTotalQty(Pageable pageable);
@Query("SELECT "
+ "new com.path.to.LaptopModelCount"
+ "(l.laptopModel AS laptopModel, COUNT(l.laptopModel) AS qty,"
+ "sum(case when l.status = 'ready' then 1 else 0 end) AS ready,"
+ "sum(case when l.status = 'partsOnly' then 1 else 0 end) AS partsOnly)"
+ "FROM Laptop l "
+ "GROUP by l.laptopModel")
List<LaptopModelCount> findLaptopQtySummary();
However when I change List<LaptopModelCount> findLaptopQtySummary();
to Page<LaptopModelCount> findLaptopQtySummary(Pageable pageable);
, I got org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: select near...
LaptopModelCount.Class
package com.path.to;
public class LaptopModelCount {
long laptopModel;
long qty;
long ready;
long partsOnly;
public LaptopModelCount(long laptopModel, long qty) {...}
public LaptopModelCount(long laptopModel, long qty, long ready,long partsOnly) {...}
}