4

表示タグは、指定されたオブジェクトのページネーション機能を提供します。Hibernates は、ページごとに必要なレコードのみを取得するオプションを提供します。私のプロジェクトでは、両方の概念を使用しています。

表示タグ: フィルター基準に基づいてすべてのレコードを取得し、セッションに保存する必要があります。次に、この displaytag がすべてのページ付けと並べ替えを処理します。そのため、Httpsession は大量のデータを保持します。

Hibernate: データベースから要求された数のオブジェクトのみをフェッチします。要求ごとにセッションを開く必要があります。

最善の方法は何ですか?または、両方を達成できる場合はどうすればよいですか? これについて助けてください。

4

2 に答える 2

4

概説したように、DisplayTag を使用すると、すべての結果を取得してセッションに入れる必要があります。したがって、1 つの (潜在的に高価な) クエリしか実行していませんが、これはメモリの観点からは十分にスケーリングされません (多数の結果を取得する必要がある場合、または同時ユーザーの数を増やす場合)。

一方、Hibernate では、 and を使用して、各ページに実際に表示されているレコードのみを取得できsetFirstResultますsetMaxResult。これには、ページごとにクエリを実行する必要がありますが、無限の数の結果に対応できます。

個人的には、特にほとんどのユーザーがすべてのページをブラウズするわけではないため (なぜすべての結果をロードするのか)、メモリ効率が高いと思われる 2 番目のアプローチを好み、Hibernate および EJB3 のページネーションで説明されているパターンを使用します。

最初のアプローチに固執することにした場合は、コストがかかりすぎるクエリを避けるために、ある種の最大結果数制限を実装します。クエリが制限を超えた場合は、より限定的な検索を実行するようにユーザーに依頼してください。つまり、条件を追加してください (とにかく数千の結果を閲覧するのは誰ですか?)。

また、レポート目的などですべての結果が必要な場合、私の意見では、DisplayTag もステートフル セッションも適切なツールではありません。

于 2010-06-29T21:07:14.183 に答える
3

実際にすべての結果を取得する必要はありません。外部ページ付けと呼ばれる Displaytag 機能を使用できます。この機能では、Displaytag の外部でページ付けを処理していることを Displaytag に伝えます。

詳細については、Displaytag のドキュメントの外部ページングと並べ替えを参照してください。

また、このスタックオーバーフローの質問には、詳細情報とサンプル コードがあります。

于 2011-04-14T14:32:34.477 に答える