private PaginationResult<EmployeeEntity>
paginateUsingHql(int pageNumber, int pageSize) {
int lastPageNumber;
Long totalRecords;
List<EmployeeEntity> employeeList;
try (Session session = sessionFactory.openSession()) {
session.getTransaction().begin();
TypedQuery countQuery = session.createQuery("SELECT COUNT (e.id) from " +
"EmployeeEntity e", Long.class);
totalRecords = (Long) countQuery.getSingleResult();
if (totalRecords % pageSize == 0) {
lastPageNumber = (int) (totalRecords / pageSize);
} else {
lastPageNumber = (int) (totalRecords / pageSize) + 1;
}
session.getTransaction().commit();
}
try (Session session = sessionFactory.openSession()) {
session.getTransaction().begin();
TypedQuery<EmployeeEntity> query = session.createQuery("From " +
"EmployeeEntity e ORDER BY e.id",
EmployeeEntity.class);
query.setFirstResult((pageNumber - 1) * pageSize);
query.setMaxResults(pageSize);
employeeList = query.getResultList();
session.getTransaction().commit();
}
PaginationResult<EmployeeEntity> result = new PaginationResult<>();
result.setCurrentPageNumber(pageNumber);
result.setPageSize(pageSize);
result.setLastPageNumber(lastPageNumber);
result.setTotalRecords(totalRecords);
result.setRecords(employeeList);
return result;
}