Die Paginierung funktioniert nicht mit verbundenen Sammlungen, da sie alle Zeilen zählt, die das where
erfüllt haben Prädikat (Hibernate hat damit nichts zu tun, so funktionieren Datenbanken, zum Beispiel Oracle rownum
).
Der übliche Weg, dies zu umgehen, ist die Verwendung von Unterabfragen, sodass rownum
(oder das Äquivalent in der verwendeten Datenbank) wird auf die ausgewählten Zeilen von nur einer Tabelle (oder verknüpften Tabellen, die in Eins-zu-Eins-Beziehungen stehen) angewendet.
In HQL:
select p from Parent p were p in (select c.parent from Child c where ...)
Das Kriterienäquivalent kann auf ähnliche Weise aufgebaut werden.