編集: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();
もっと良いものはありますか?