L'impaginazione non funziona con le raccolte unite perché conta tutte le righe che hanno soddisfatto il where
predicato (Hibernate non ha nulla a che fare con questo, è il modo in cui funzionano i database, ad esempio Oracle rownum
).
Il solito modo per superare questo problema è usare le sottoquery, in modo che rownum
(o l'equivalente nel database utilizzato) viene applicato alle righe selezionate di una sola tabella (o tabelle unite che sono in relazioni a uno).
In HQL:
select p from Parent p were p in (select c.parent from Child c where ...)
L'criteri equivalente può essere costruito in modo simile.