Редактировать: оказывается, что JPA не может выразить это.Решением было переписать в SQL.
Я использую QueryDSL для выполнения агрегированного запроса к набору данных JPA для создания отчетов.У меня нет проблем с извлечением данных отчета.Например:
...
query = query.groupBy(QVehicle.vehicle.make, QVehicle.vehicle.model);
return query.listDistinct(new QMakeModelReportData(
QVehicle.vehicle.make, QVehicle.vehicle.model,
QVehicle.vehicle.make.count()));
Это создает список моего объекта DTO, каждый из которых содержит марку транспортного средства, модель транспортного средства и количество транспортных средств этой модели.Например:
Ford, Focus, 14
Ford, Mondeo, 4
Vauxhall, Astra, 4
Но я не могу определить синтаксис для подсчета количества строк, прежде чем я действительно выполню запрос.Синтаксис, который я себе представляю, выглядит следующим образом, которого не существует:
return query.countDistinct(QVehicle.vehicle.make, QVehicle.vehicle.model);
У меня получился довольно неэффективный вариант:
return query
.listDistinct(QVehicle.vehicle.make, QVehicle.vehicle.model)
.size();
Есть что-нибудь лучше?