web-dev-qa-db-ja.com

HibernateでのLEFT JOINとLEFT JOIN FETCHの違いは?

HibernateのLEFT JOINLEFT JOIN FETCHの違いを理解しようとしています。

誰でもこれを説明できますか?

ありがとう

44
Barry

「フェッチ」は、休止状態でロードするのではなく、すぐにロードするように休止状態に指示します。リファレンスガイドには whole chapter があり、これを知っておくと便利です。

56
Ryan Stewart

FETCHを使用して、アプリケーションのパフォーマンスを調整できます。これはHibernateの直交概念の1つであり、質問に答えますhow(fetch style)アソシエーションがフェッチされます。 4つのスタイルがあります:select/subselect/batch/join

2番目の概念は、when(フェッチタイミング)フェッチする必要があります。 Hibernateで定義されている6つのプロパティの1つで設定できます。ほとんどの4つのプロパティは、eagerlazyextra lazyproxy。( hibernate-core

Hibernateはデフォルトで使用します:

  • コレクション:遅延選択フェッチ
  • 単一値の関連付け:遅延プロキシフェッチ

Join

JOINまたは(LEFT JOINonlyは親オブジェクトを返します。

フェッチに参加

JOIN FETCH(またはLEFT JOIN FETCH)は、所有者オブジェクトとともにすべての関連付けを収集します。コレクションが同じselectで取得されることを意味します。これは、Hibernateの統計を有効にすることで表示できます。

(左/外部)結合フェッチは、* ToOne(多対1または1対1)の関連付けに最適です。非バッグで使用されますが、テーブルのカーディナリティが高い場合に発生する可能性のあるデカルト座標の問題に注意してください。 selectフェッチスタイルは、ほとんどのキャストで高速であることに注意してください。

Less selectステートメントは、休止状態とデータベース間の往復回数が少ないことと同義ですが、パフォーマンスの向上と同義ではないことに注意してください。

3
KeyMaker00