@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\]
0

There are 0 best solutions below