Define limit and offset on the Query:
return em.createQuery(query)
.setFirstResult(offset) // offset
.setMaxResults(limit) // limit
.getResultList();
From the documentation:
TypedQuery setFirstResult(int startPosition)
Set the position of the first result to retrieve. Parameters:
startPosition – position of the first result, numbered from 0TypedQuery setMaxResults(int maxResult)
Set the maximum number of results to retrieve.