2011-11-07 13 views
1

私はhttp://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.htmlでHibernateチュートリアルを行って、selectまたはJoinの間に戦略をフェッチする方が良いと私たちが行くべきかという質問を受けました。ほとんどの人はあなたの要求に依存していると言うでしょう。しかし、ほとんどのWebアプリケーションでは、パフォーマンスが良くなければならないという共通の要件があります。ここに私の理解があります: -Lazy Fetch戦略対Eager Hibernateで戦略をフェッチしますか?

レイジー/セレクトフェッチ戦略: - フェッチ戦略は、関連のレイジーフェッチです。レイジー戦略の目的は、メモリの最適化です。メモリ最適化とは、ヒープエラーから私たちを救うことを意味します。これが私の考えです。 Lazy Fetch戦略を実行する必要があるaseesionにあまりにも多くのオブジェクトをロードしている場合はyesと言うことができますが、時間パフォーマンスに関しては何の利点も提供しません。合意?

Eager/Joinフェッチ戦略: - Joinアソシエーションの熱心なフェッチ戦略をフェッチします。Join Fetch戦略の目的は、時間の点で最適化です。つまり、親オブジェクトをフェッチするときにアソシエーションが正しくフェッチされます。この場合、我々は何度も何度もデータベース呼出をしません。したがって、これははるかに高速になります。セッションであまりにも多くのオブジェクトを取得すると、これは悪くなります。なぜなら、Javaヒープエラーが発生する可能性があるからです。

これで、時間応答の点ではるかに優れているので、私たちが取り組むべきオブジェクトがあまりにも多くロードされていないハイバーネーションセッションで言うことができます(ガベージコレクタによって一度だけメモリが再利用されます)私たちはセッションを閉じますか?)

答えて

1

データをロードする必要がある場合はJoin、通常はデータが必要ない場合はSelectに移動します。

についてJava Heap Errorについてはあまり心配しないでください。たくさんのオブジェクトをロードする必要があります。 batch sizeを設定できます。オブジェクトの負荷だけではありません。

すべてのオブジェクトを読み込む必要がない場合は、特定のHQLまたはCriteriasを追加できます。

以上のものが必要な場合は、Joinの場合はSelectとなります。