2016-11-23 5 views
2

私たちのプロジェクトでは、Hibernateを使用し、ログでは、FetchModeを指定しなかったときに、ときどき結合を使用し、時には関係を選択することが観察されます。どのようにFetchModeをデフォルトで使用するかをhibernateが決めますか?

FetchModeのどれが指定されていない場合にHibernateがどのようなものを使用するかはどのように決めるのですか?

これに関する仕様はありますか?任意のコード行?すべての記事?

+0

http://www.solidsyntax.be/2013/10/17/fetching-collections-hibernate/ – Steephen

+0

「いつ」(レイジー、エイガー)と「ハウ」(選択、結合など) FetchModeに関連して。あなたは "how"に興味があるようです。公式の[documentation](https://docs.jboss.org/hibernate/orm/4.2/manual/en-US/html/ch20.html)を読んでみてください。デフォルトモードに関する詳細。 – aUserHimself

答えて

3

Hibernateの注釈@Fetchがフィールド上に存在しない場合、このフィールドのデフォルトFetchModeは次のとおりです。

  • このフィールドはEAGER FetchType =を持っている場合、FetchModeは=登録しよう。
  • それ以外の場合は、FetchMode = SELECTです。 HEREHEREそして最も重要なのは、HERE:この情報について

マイソースコード自体(5.0休止状態)です。

+0

非常に良い。私は私の答えをより明確にします。 – Dherik

1

FetchModeが指定されておらず、FetchTypeがEAGERの場合に生成されたSQLを見ると、デフォルトはHibernateではJOINです。

悲しいことに、私は公式の文書でこの情報を見つけることができません。 SELECTの使用について

JOINがデフォルトであっても、私は1つのクエリで解決することができない一部のクエリ、like thisされているものと:

しかし、あなたがC、休止せずにBを許可する場合しかし、同じSELECTが存在をチェックするだけでなく、 オブジェクト全体を読み込むので、存在を確認するSELECTは、 だけで効率的ではありません。だから怠惰な読み込みがなくなります。

関連する問題