HibernateのLEFT JOIN
とLEFT JOIN FETCH
の違いを理解しようとしています。
誰でもこれを説明できますか?
ありがとう
「フェッチ」は、休止状態でロードするのではなく、すぐにロードするように休止状態に指示します。リファレンスガイドには whole chapter があり、これを知っておくと便利です。
FETCH
を使用して、アプリケーションのパフォーマンスを調整できます。これはHibernateの直交概念の1つであり、質問に答えますhow(fetch style)アソシエーションがフェッチされます。 4つのスタイルがあります:select
/subselect
/batch
/join
。
2番目の概念は、when(フェッチタイミング)フェッチする必要があります。 Hibernateで定義されている6つのプロパティの1つで設定できます。ほとんどの4つのプロパティは、eager
、lazy
、extra lazy
、proxy
。( hibernate-core )
Hibernateはデフォルトで使用します:
Join
JOIN
または(LEFT JOIN
)onlyは親オブジェクトを返します。
フェッチに参加
JOIN FETCH
(またはLEFT JOIN FETCH
)は、所有者オブジェクトとともにすべての関連付けを収集します。コレクションが同じselectで取得されることを意味します。これは、Hibernateの統計を有効にすることで表示できます。
(左/外部)結合フェッチは、* ToOne(多対1または1対1)の関連付けに最適です。非バッグで使用されますが、テーブルのカーディナリティが高い場合に発生する可能性のあるデカルト座標の問題に注意してください。 select
フェッチスタイルは、ほとんどのキャストで高速であることに注意してください。
Less select
ステートメントは、休止状態とデータベース間の往復回数が少ないことと同義ですが、パフォーマンスの向上と同義ではないことに注意してください。