2010-12-17 13 views
2

今日のインタビューで、Hibernate eager loadingについて質問を受けました。問題は:従業員クラスと住所クラスとの関係がある場合:1人の従業員 - >多くの住所。 どのように1つのクエリでEmployeeクラスをクエリしてすべてのアドレスを取得できますか?Hibernate Criteria API

私はアドレスで熱心な読み込みをオンにすることができると述べましたが、これはN + 1桁になります。

要件は、1 sqlを使用してすべての従業員と住所をロードすることです。 答えはおそらくHibernate Criteria APIと関係があります。私がネットを見ると、これがどのように達成されるのか分かりません。 あなたの考えは高く評価されます。これはフリッツ%のような名前の猫のリストを取得し、その彼らの合致参照がすでにロードされ、その子猫のコレクションはまた、すでにロードされているでしょうhibernate reference:

List cats = sess.createCriteria(Cat.class) 
    .add(Restrictions.like("name", "Fritz%")) 
    .setFetchMode("mate", FetchMode.EAGER) 
    .setFetchMode("kittens", FetchMode.EAGER) 
    .list(); 

から

答えて

3

は、おそらくそれは熱心にフェッチより設定して参照の上、外部結合をしていることを確認するために生成されたSQLをチェックするために、このような何かを試してみるべきです。

+0

これは実際には違っただけで、 '' @Fetch(FetchType.EAGER)を使用してから動作しますか?どんな考え? –

関連する問題