遅延読み込みを使用してフレックス アプリケーションにエンティティを読み込む方法を教えてください。深いオブジェクト グラフがあります。
2 に答える
GraniteDSとそのデータ管理フレームワークを併用すると、開始されていない関連付けを透過的に読み込むことができます。こちらのドキュメントを参照してください。したがって、基本的に、遅延コレクション/プロキシを初期化するために特別なことをする必要はありません。クライアント側でそれらの 1 つにアクセスするだけで (たとえば、コレクションのサイズを要求する)、それがトリガーされます。サーバーを呼び出して、初期化されていないデータをフェッチします。
透過的な遅延読み込みを望まない、または使用できない場合は、EntityManager へのアクセスが必要な特定の初期化メソッドを記述し、エンティティをパラメーターとして受け取り、必要な関連付けを初期化し、エンティティをクライアント。
AFAIKそれは不可能です。これを行うには、休止状態のセッションを開く必要があります。私のプロジェクトでは、この方法で必要なことを行っています。
私はこのような春のサービスを持っています:
public interface SomeObjectManager {
List<SomeObject> getObjects(); // here we have lazy loading for SomeObject's properties
SomeObject getFullObject(long objectId); // here we're loading full object
}
SomeObjectの一部のプロパティは、遅延読み込みを使用します。それらをロードするには、次のようなHQLクエリを使用します。
SELECT s FROM SomeObject s
LEFT JOIN FETCH s.child children
LEFT JOIN FETCH children.items items
LEFT JOIN FETCH items.property
WHERE s.id=:id
このクエリは、休止状態で定義されたプロパティをレイジーにロードするように強制します。
したがって、完全にロードされたSomeObjectインスタンスが必要ない場合は、getObjects()メソッドを使用します。その場合、getFullObject()メソッドを使用する具体的なSomeObjectインスタンスの詳細が必要です。
お役に立てれば。