休止

2012-01-21 19 views
6

にフェッチモードを使用するのは、上記のコードで休止

class Customer{ 

@OneToMany(cascade = {CascadeType.ALL},mappedBy = "customer", fetch = FetchType.LAZY) 
@Fetch(FetchMode.SELECT) 
private List<Phone> phoneList; 

} 

..私たちはお客様と電話の間には多くの関係を1としましょう、= FetchType.LAZYとFetchMode.SELECTをフェッチ の違いは何ですか。

私は、両方とも同じである、つまり両方とも、基礎となるコレクションを遅延ロードしていることを読んでいます。

いつ誰かが私に説明することができますか?

答えて

13

は、それが(熱心)エンティティをフェッチするとき Hibernateは、事前にするかどうか、関連をフェッチするときにタイプ(遅延/熱心な)意味を取得し、またはそれがコードを待つかどうかアソシエーション(遅延)を要求します。

フェッチモード(選択/結合)はを参照します。 Hibernateは関連付けをフェッチします。つまり、余分なSELECT文を使用するか、結合を使用しますか?

これらのいくつかの組み合わせは意味をなしません。怠惰な+結合。遅延フェッチを使用する場合、SELECTフェッチ・モードだけが実行できます。

eager fetchを使用している場合は、どちらのフェッチモードを使用するかを選択できます。

+0

お返事ありがとうございます。熱心なフェッチの場合は、どのフェッチモードを使用する方が良いですか.SELECTまたはJOIN? – Anand

+0

@anand:「良い」という言葉はありませんが、あなたのために参加すると、より良いパフォーマンスが得られます。 – skaffman