@Query("SELECT new com.kpisoft.performance.kpi.vo.KpiLibraryData(kdl.id, kdl.kpiName, kdl.description, kdl.goalSourceStatus, " +
"(SELECT COUNT(klc.employee.id) FROM KpiLibraryCascade klc WHERE klc.libraryId = kdl.id AND klc.programId = :programId) as employeeCount ) " +
"FROM KpiLibrary kdl " +
"LEFT JOIN KpiLibraryCascade klc ON kdl.id = klc.libraryId " +
"WHERE (kdl.role = :role OR kdl.role IS NULL) " +
"AND kdl.tenant.id = :tenantId " +
"GROUP BY kdl.id " +
"ORDER BY kdl.goalSourceStatus DESC, employeeCount DESC")
List<KpiLibraryData> findKpiLibraryDatSorted(@Param("programId") Integer programId,
@Param("role") String role,
@Param("tenantId") Integer tenantId);
The above is the working query where the return type is list, but the below is the not working query when the return type is page.
@Query("SELECT new com.kpisoft.performance.kpi.vo.KpiLibraryData(kdl.id, kdl.kpiName, kdl.description, kdl.goalSourceStatus, " +
" (SELECT COUNT(klc.employee.id) FROM KpiLibraryCascade klc WHERE klc.libraryId = kdl.id AND klc.programId = :programId) as employeeCount ) " +
" FROM KpiLibrary kdl " +
" LEFT JOIN KpiLibraryCascade klc ON kdl.id = klc.libraryId " +
" AND klc.programId = :programId " +
" WHERE (kdl.role = :role OR kdl.role IS NULL) " +
" AND kdl.tenant.id = :tenantId " +
" GROUP BY kdl.id " +
" ORDER BY kdl.goalSourceStatus DESC, employeeCount DESC ")
Page<KpiLibraryData> findKpiLibraryDatPagination(@Param("programId") Integer programId,
@Param("role") String role,
@Param("tenantId") Integer tenantId,
Pageable pageable);
I tried to fetch the result in paginated manner, I expect the query to return 12 data for the first time when the page size is 1 and next 12 data when page size is 2 and so on.
But I get the error:
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting EOF, found ')' near line 1, column 140 \[select count(klc) FROM com.kpisoft.performance.kpi.entity.KpiLibraryCascade klc WHERE klc.libraryId = kdl.id AND klc.programId = :programId) as employeeCount ) FROM com.kpisoft.performance.kpi.entity.KpiLibrary kdl LEFT JOIN com.kpisoft.performance.kpi.entity.KpiLibraryCascade klc ON kdl.id = klc.libraryId AND klc.programId = :programId WHERE (kdl.role = :role OR kdl.role IS NULL) AND kdl.tenant.id = :tenantId GROUP BY kdl.id\]