2011-11-10 5 views
0

私は、Hibernateを使ったオブジェクト永続性については新しいです。私は、怠惰な、賢明で即座のフェッチへの怠惰なセットの違いは何かを理解しようとする本を読んでいますが、違いは見られません。どんな助け?lazy = false、eagerとimmediateのフェッチの違いは何ですか?

ありがとうございます!

+0

可能な複製:http://stackoverflow.com/questions/3836344/what-is-the-difference-between-hibernate-initialize-and-eager-fetchching –

答えて

1

私はそれが聞こえるようレイジーがある

「即時に」「熱心」(実装を休止JPA、という熱心な定義)の同義語であると考えています。あなたがするまで何もしないでください。熱心なことは...それが聞こえるように。

Fooにコレクションがあり、それをlazyに設定した場合、そのコレクションの内容が必要なときのみ、選択、読み込みなどが行われます。一方、熱心であれば、 Fooを読み込みます。これは、エンティティのコレクションを熱心に読み込むエンティティのコレクションを熱心に読み込んだ場合などに問題になることがあります。

しかし、すべてを怠惰にすると、過剰なクエリや往復が発生する可能性があります。あなたはエンティティをどのように使用するかについて何が正しいかを選択する必要があります。

怠惰でスタートしますが、親指の1行のルールをしたい場合は...すぐにと熱心なフェッチの間

+0

そして、すでにDougのポストで " n + 1のクエリの問題 "のような[this](http://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem)SO post。 – Voo

1

主な違いは、即時フェッチにある2つの別々のクエリがあるが、所有しているオブジェクト用とのために他を解雇しました関連付けられたオブジェクト。しかし、賢明なフェッチの場合、内部結合/外部結合を含む問合せが1つだけ実行され、エンティティとの関連オブジェクトが取得されます。

関連する問題