У меня есть критерии, которые возвращают все данные, требуемые приложением, в основном:
Criteria criteria = session.createCriteria(Client.class);
criteria.createAlias("address", "address");
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
criteria.setFirstResult(init);
criteria.setMaxResults(max);
List<Client> clients = criteria.list();
Проблема заключается в том, что клиент/адрес отношения двунаправлен: на клиенте есть один адрес и один адрес может принадлежать более чем одному клиенту.
Я хочу получить "одиночные" клиентские объекты на основе их pk, конечно, некоторое количество клиентов, поскольку они отображаются в таблице.
Поскольку выполняются setFirstResult/setMaxResults, я получаю дублированные клиенты в уже применяемых ограничениях. После того, как был использован (уровень приложения как не групповой), hibernate получает избытки дублирующих клиентов, поэтому я заканчиваю тем, что меньше клиентов, что максимум указан в setMaxResults.
Невозможно группировать группу (группу проекций), поскольку она не будет возвращать все столбцы, требуемые в клиенте/адресах, только группа, к которой группируется запрос.
(Подводя итог, моя таблица имеет 100 результатов на странице, но после отбрасывания дубликатов у меня есть 98 результатов вместо 100...), потому что предел: LIMIT 0,100 применяется до спящих групп, когда он должен выполняться ПОСЛЕ)