3

遅延ロードされたオブジェクトのネストされた値をロードするのが最善の方法は何でしょうか。これをよりよく説明するのに役立つ例を提供します。

public class A{
    private B b; //Lazy loaded
    private C c; //Lazy loaded
    private D d; //Lazy loaded
}
public class B{
    private E e; //Lazy loaded
    private F f; //Lazy loaded
}
public class C{
}
public class D{
}

例として、私がやりたいことは次のとおりです。

System.out.println(a.getB().getE());

上記のステートメントを実行すると、遅延読み込みの例外が発生します。

私はいつでも次のことができます:

for (A a : somePossiblyLargeList) {
    org.hibernate.Hibernate.initialize(a.getB().getE());
}

しかし、明らかにパフォーマンスは悪くなります。

それらの特定のネストされたフィールドが事前に入力されているAオブジェクトを返すカスタムHQLクエリを作成する方法はありますか?

ありがとう!

4

1 に答える 1

6

もちろん。

Hibernateリファレンスドキュメント(読む必要があります)でjoin fetch説明されているように、HQLクエリで使用します。

select a from A a left join fetch a.b b left join fetch b.e e where ...
于 2011-09-30T16:58:45.027 に答える