次のグループ化を含む条件ベースのクエリがあります。
Projections.projectionList()
.add(Property.forName("xyz").group()));
生成された SQL は次のとおりです (独自仕様のため、クレンジングされています)。
select this_.XYZ as y0_ from FOO.BAR this_ WHERE [long where clause]
group by this_.XYZ
ここで、概念的には、クエリ結果を count(*) でラップして、データベースからデータが返されないようにします。カウントだけです。このような:
select count(*) from (
select this_.XYZ as y0_ from FOO.BAR this_ WHERE [long where clause]
group by this_.XYZ
)
不要な行が何千行もある可能性があり、高性能に関心があるため、そのデータがネットワーク経由で送信されることは望ましくありません。
私の基準ベースの検索には、多数の条件があります。現実的に再構築することはできないので、基準に固執する必要があります。
もちろん、rowCount または count("xyz") を追加しても役に立ちません。行ごとに 1 が報告されるだけだからです。
私は現在、カウントを取得するためにこれを行っています:
ScrollableResults scroll = criteria.scroll();
scroll.last();
int count = scroll.getRowNumber();
機能しますが、カウントに戻るのに時間がかかります(問題がある場合はOracleで)。
私が提案していることを実行できますか?