主にHQLを使用しています。しかし、私たちは多くの結合を含むこの複雑な検索フォームを持っているので、Criteria を使用して運を試してみようと思いました (これまでにない)。私は構文の方がはるかに気に入っており、私たちが持っている複雑なフォームに適合しています。
私の最初の本能は、 and.list().size()
を適用する前に a を実行することでした。もちろん、これは遅くて怠け者であり、リソースを大量に消費します。setMaxResults
setFirstResult
少しグーグルした後、ScrollableResults を使用する例を見つけました。しかし、この投稿では、MySQL はカーソルをサポートしていないと述べています。これは 2004 年の投稿です。ここ 2012 年では、MySQL 5 と InnoDB テーブルを使用しています。だから私たちはカーソルをサポートしていると思います。次に、プロジェクションを使用することがわかりました。
したがって、Hibernate の第一人者ではないので、最善の道を迷っています。将来的にはDB2を使用する可能性があるため、どのソリューションを使用しても DB2 と MySQL 5 で動作する必要があると思います。
何か案は?少なくとも、カスタム HQL を使用してカウントを取得できると思います(*)。
ありがとう
アップデート
これを入れただけです:
ScrollableResults scr = crit.scroll();
scr.last();
int rowCount = scr.getRowNumber() + 1;
対
int rowCount = crit.list().size();
制限/開始値を設定する前の両方。それははるかに速く走りました。したがって、特定のDBと結果に対してカーソルが機能していると想定しています。私はそこにいくつかの結合を入れましたが、それでもはるかに高速であるようです。
これがまだ良い考えかどうかについて何か意見はありますか?