問題タブ [lazy-loading]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-flex - RIA で遅延読み込みが問題になるのはいつですか?
Spring MVC + Hibernate を使用した単純な Web アプリケーションがあり、OpenSessionInViewFilter を使用しています。最近、UI を Flex や GWT のようなものに置き換えようと考えています。
最初は、新しいフロント エンドからサービス レイヤーにアクセスするだけでよいので、簡単だと思いました。しかし、これをもう少し考えてみると、遅延読み込みを取り巻く問題について少し神経質になっています。ビューで開いているセッションを使用しているため、従来のWebフロントエンドを使用しても問題ありません...ビューのためにロードする必要があるすべてのものは、ビューが構築されるときにロードされます。
では、Customer を返すメソッドがあり、Customer には多数の連絡先があり、Contacts には多数の Address があるとします。新しい「RIA」コントローラーから getCustomer() を呼び出すと、Customer が取得されますが、Customer の Contacts コレクションはプロキシまたは null になります。
事前に入力された DTO を返す新しいレイヤーを既に持っているものの上に作成することもできます...しかし...それは複雑になるようです。
何かアドバイス?
hibernate - hql を介して 1 対 1 のコンポジションを遅延ロードする方法
エンティティ B との双方向の 1 または 0 対 1 マッピングを持つエンティティ A があるとします。
マッピングは次のとおりです。
と
EntityA に対して hql クエリ (または名前付き hql クエリ) を実行すると、hibernate は別の select ステートメントで EntityA#propertyB を積極的に読み込みます。
それに関する私の問題は、私の hql が 1000 個の EntityA を返した場合 (すべてが独自の EntityB を持っている)、休止状態が n+1 クエリを実行することです (最初のクエリは 1000 の結果を返す EntityA 用であり、n 個のクエリは EntityA からのものです。 propertyB は遅延読み込みを選択します)。
ただし、これらの EntityA#propertyB は必要ありません。そのため、代わりにそれらを遅延ロードしたいのです (休止状態に別の SQL クエリを使用させることなく)。
それは可能ですか?もしそうなら、どうすればいいですか?
ありがとう、フランツ
java - Java JDBC 遅延ロードされた ResultSet
JDBC クエリを実行して取得した ResultSet を遅延ロードする方法はありますか? 事前にではなく、要求したときに各行をロードしたい。
.net - 異なるグラフを持つオブジェクトをロードするための適切なパターンを見つける
使用されているコンテキストに応じて、異なるグラフ (関連するエンティティ) を持つオブジェクトの読み込みを処理する最善の方法を見つけようとしています。
たとえば、これは私のドメイン オブジェクトのサンプルです。
私が理解しようとしているのは、この情報の使用方法に応じて、この情報を異なる方法でロードする方法です。
たとえば、フロント ページにはすべてのパズルのリストがあります。この時点では、パズルの解決策やそれらの解決策の手順についてはあまり気にしません (これはかなり重くなる可能性があります)。私が欲しいのはパズルだけです。次のようにコントローラーからロードします。
後のパズル ビューでは、現在のユーザーのソリューションのみを気にします。すべてのソリューションとすべてのステップを含むグラフ全体をロードしたくありません。
IPuzzleService 内では、メソッドは次のようになります。
私のセッションは各作業単位の直後に破棄されるため、遅延読み込みは実際には機能しません。私のコントローラーにはリポジトリの概念がないため、セッション状態を管理せず、ビューがレンダリングされるまで保持できません。
ここで使用する正しいパターンは何かを理解しようとしています。サービスにさまざまなオーバーロードがありますGetPuzzleWithSolutionsAndVotes
か?GetPuzzlesForDisplayView
GetPuzzlesForListView
私は理にかなっていますか?私はベースから離れていますか?助けてください。
c# - Hibernate セッション管理と遅延読み込み
私は、NHibernate でのセッション管理の問題を解決しようと、かなりの時間を費やしています。私の問題の多くは、IoC と AOP の概念に関する知識が不足しているためだと思います。少なくとも、ファビオ・マウロが私に指示し続けているところから、私はそう考えています。
とにかく、私の問題は、「取得」呼び出しを行い、結果をグリッドにバインドする勝利フォーム アプリケーションがあることです。バインド後、ユーザーはある種の「書き込み」アクションを実行できますが、その結果、使用コンセプトごとにセッションを使用しようとして、書き込み後にセッションが閉じられます。次に、ユーザーがグリッドをスクロールすると、遅延読み込みが開始され、セッションが閉じられ、例外が発生します。
ビューにセッションを認識させたくありません。ユーザーがフォームを閉じたときに KillAllSessions を送信したくありません。さらに、ユーザーはいつでも複数のフォームを開いている可能性があり、その方法に関連する問題がさらに複雑になります。私は本質的に、これらすべてが「舞台裏」で機能することを望んでいます。
したがって、これまでの私の考えは、遅延読み込み呼び出しをインターセプトし、セッションが開いているかどうかを確認し、再度開いていない場合は情報を取得してから再度閉じることです。ただし、私が知る限り、これは大したことではありませんが、基本的には遅延読み込みがどのように機能するかです。これはプロキシ ファクトリ (NHibernate.Bytecode.Castle) によってインターセプトされ、セッションを使用してデータを取得します。したがって、実際にその呼び出しをインターセプトし、セッションを再度開いた後、元の意図したインターセプトに渡す必要があります。それが私の考えです。
私の質問は基本的にまず第一に、これはこれを行う正しい方法ですか? 第二に、どこから始めればよいかさえわかりません。メソッド呼び出しのインターセプトを行ったことはありません。理論的には知っていましたが、実際には知りませんでした。Rhino Commons など、この種のことを行うライブラリがあることは知っていますが、この機会に学び、より優れたプログラマーになりたいと考えています。私は AOP と Context Bound Objects を理解しようとしていますが、現在は理解していません。あなたの何人かが男を助けてくれませんか?
nhibernate - エンティティに遅延プロパティが存在する場合、NHibernate の criteria.List() がハングする
NHibernate クエリがハングし始めるという非常に奇妙な動作が発生しています。この動作を再現可能な方法で示すデモ プロジェクトを作成しました。
プロジェクトはこちらからダウンロードできます
問題のあるコードは次のとおりです。
重要な行は、作成者フィールドの .SetFetchMode です。私のデモ プロジェクトの最初のロードでは、正常にロードされます。更新を押すとハングし、crit.List() 呼び出しを通過しません。熱心な読み込みでは、いつでも機能します。
Castle.Facilities.NHibernateIntegration.Components.SessionWebModule を使用して、リクエストごとに 1 つのセッションを確保しています。
私が見つけたもう1つの奇妙なことは、これがSQL Serverでのみ発生することです。SQLite を使用すると、すべて正常に動作します。私のデモ プロジェクトでは、db を簡単に切り替えることができる単純なビルド フラグがあります。/build ディレクトリの local.properties.xml を見てください。
この特定のケースでは、熱心な読み込みによって問題が解決されることは理解していますが、私のアプリケーションでは、すべてを熱心に読み込む必要はありません。
ソリューションをダウンロードして、自分で試してみてください。他のマシンで試してみましたが、同じことをします。
SQL プロファイラーのキャプチャを次に示します。Posts のクエリがサーバーに送信されたことがわかりますが、そこで停止します。
最初のリクエスト (期待どおりに動作):
いいリクエスト http://muc-central.com/misc/good_request.jpg
2 番目の要求 (ハング):
c# - 遅延ロードされたプロパティの永続化
単純なリポジトリパターンを使用していて、次のようなLazyListを持つオブジェクトがあります。
これはアイテムを取得するのに最適ですが、アイテムを保存するために通常何をするのか疑問に思っていますか?
プロモーションを継続するには、最初にロードされた場合にのみTargetSitesのリストを保存する必要があります。これは、遅延ロードされたアイテムの通常のパターンですか?遅延読み込みに関する多くの情報を見つけることができますが、遅延読み込みされたオブジェクトへの結果の変更を永続化することについてはほとんどありません。
.net - 遅延ロードされたプロパティのデバッグ時の評価を無視するようにVS2008に指示できますか?
.Netアプリケーションでは、一部のビジネスオブジェクトは遅延読み込みを使用してサーバーからのデータにアクセスします。デバッグ中、プロパティを検査する場合は、IDEがこれらのプロパティを評価しようとして失敗するため、これらのプロパティを「確認」したりアクセスしたりしないように十分に注意する必要があります。Intellisenseで表示されても、デバッグ時にオブジェクトが検査されているときに評価されないように、これらのプロパティに設定できる属性はありますか?
java - セッションが閉じた後、休止状態を使用して遅延ロードされたフィールドにアクセスするにはどうすればよいですか?
このシナリオを検討してください。
- 休止状態で親エンティティをロードしました
- 親には、大きくて遅延ロードされた子のコレクションが含まれています
- ユーザーが親データを表示している間、この初期ロード後にHibernateセッションは閉じられます
- ユーザーは、怠惰な子供コレクションのコンテンツを表示することを選択できます
- そのコレクションをロードしたい
このコレクションをロードする方法/最良の方法は何ですか?
- Childrenコレクションのフェッチは、ユーザーが親を表示し、子を表示することを決定した後にのみ発生するため、セッションインビューはオプションではないと想定します。
- これは、Webおよびデスクトップベースのクライアントからリモートでアクセスされるサービスです。
ありがとう。
entity-framework - エンティティフレームワーク:遅延読み込みの「解決策」に関する問題(遅延読み込みの実行方法を尋ねない)
つまり、基本的に、生成されたプロパティをプライベートにし、生成されたプロパティをロードするかどうかを処理するパブリックプロパティを作成することで、遅延ロードに対する半自家栽培のソリューションを考え出しました。
これで、次のようなクラスのクエリでうまく機能します(生成されたクラスの部分的なクラス拡張にすべての「クエリ」があるため)。
このメソッドはItemクラス内にあるため、実行できない場合でも問題なく実行できます。
エンティティフレームワークは、式を生成するためにそのプロキシプロパティが何であるかを理解できないためです。これは本当に問題になります。たとえば、部屋のすべての投稿(アイテム)の数を取得しようとしているので、Roomクラスでそのメソッドが必要です。
Itemクラス内で同じ理由で、Itemクラス内でParentRoom(プロキシ)プロパティを使用できないため、Roomクラスのこのクエリでは使用できません。エンティティフレームワークは、そのプロパティを理解できません。
ここで質問は、ParentRoomプロパティをタグ付けして、それがParentRoomInnerプロパティを参照していることを認識し、式を分解するときにそれを処理する方法を認識できるような属性があるかどうかです。
私が考えることができる他の唯一の選択肢は、生成されたプロパティを内部にし、RoomクラスクエリでParentRoomInnerプロパティ(meh)を使用するか、GetPostCountメソッドなどのメソッドをItemクラスに移動し、RoomクラスポイントでGetPostCountメソッドを使用することです。それに。(ひどいことでもありませんが、メソッドを2倍にするだけです)