タグ付けされた質問 「lazy-loading」

「遅延読み込み」に関するプログラミングの質問の場合、オブジェクトの初期化を必要になるまで延期するデザインパターン。

9
JPA OneToOne関係を遅延させるにはどうすればよいですか
私たちが開発しているこのアプリケーションでは、ビューが特に遅いことに気づきました。ビューのプロファイルを作成したところ、データベースにフェッチするオブジェクトが2つしかない場合でも、hibernateによって1つのクエリが実行され、10秒かかったことがわかりました。すべてOneToManyとManyToMany関係は怠惰だったので、それは問題ではありませんでした。実行中の実際のSQLを調べたところ、クエリに80を超える結合があることに気付きました。 さらに問題を調査したところ、問題はエンティティクラスの深い階層OneToOneとManyToOneエンティティクラス間の関係が原因であることがわかりました。したがって、私はそれらを遅延フェッチするだけで問題を解決できると思いました。しかし、注釈を付けるか@OneToOne(fetch=FetchType.LAZY)、@ManyToOne(fetch=FetchType.LAZY)機能しないようです。例外が発生するか、実際にはプロキシオブジェクトに置き換えられないため、遅延が発生します。 これを機能させる方法はありますか?persistence.xml関係や構成の詳細を定義するためにを使用していないことに注意してください。すべてはJavaコードで行われます。

18
org.hibernate.LazyInitializationExceptionを修正する方法-プロキシを初期化できませんでした-セッションなし
次の例外が発生します。 Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167) at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215) at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190) at sei.persistence.wf.entities.Element_$$_jvstc68_47.getNote(Element_$$_jvstc68_47.java) at JSON_to_XML.createBpmnRepresantation(JSON_to_XML.java:139) at JSON_to_XML.main(JSON_to_XML.java:84) メインから次の行を呼び出そうとすると: Model subProcessModel = getModelByModelGroup(1112); System.out.println(subProcessModel.getElement().getNote()); 私はgetModelByModelGroup(int modelgroupid)最初にこのようにメソッドを実装しました: public static Model getModelByModelGroup(int modelGroupId, boolean openTransaction) { Session session = SessionFactoryHelper.getSessionFactory().getCurrentSession(); Transaction tx = null; if …


4
エンティティフレームワークlinqクエリInclude()複数の子エンティティ
これは本当に基本的な質問かもしれませんが、3レベル(またはそれ以上)にまたがるクエリを作成するときに複数の子エンティティを含めるための良い方法は何ですか? つまり、私は4つのテーブルを持っている:Company、Employee、Employee_CarおよびEmployee_Country 会社は従業員と1:mの関係があります。 従業員は、Employee_CarとEmployee_Countryの両方と1:mの関係にあります。 4つのテーブルすべてからデータを返すクエリを記述したい場合は、現在次のように記述しています。 Company company = context.Companies .Include("Employee.Employee_Car") .Include("Employee.Employee_Country") .FirstOrDefault(c => c.Id == companyID); よりエレガントな方法が必要です!これは長く巻き込まれ、恐ろしいSQLを生成します VS 2010でEF4を使用しています

10
Hibernateプロキシを実際のエンティティオブジェクトに変換する方法
Hibernateの実行中に、Session一部のオブジェクトをロードしていますが、一部のオブジェクトは遅延ロードによりプロキシとしてロードされます。すべて問題なく、遅延ロードをオフにしたくありません。 しかし、後で一部のオブジェクト(実際には1つのオブジェクト)をRPC経由でGWTクライアントに送信する必要があります。そして、この具象オブジェクトはプロキシです。だから私はそれを実際のオブジェクトに変える必要があります。Hibernateで「マテリアライズ」のようなメソッドを見つけることができません。 一部のオブジェクトをプロキシからクラスとIDを知っている実数に変えるにはどうすればよいですか? 現時点で私が目にする唯一の解決策は、そのオブジェクトをHibernateのキャッシュから削除して再ロードすることですが、それは多くの理由で本当に悪いです。

2
JavaScriptファイルを動的にロードするためのjQuery
ユーザーが特定のボタンをクリックした場合にのみロードしたい非常に大きなjavascriptファイルがあります。フレームワークとしてjQueryを使用しています。これを行うのに役立つ組み込みのメソッドまたはプラグインはありますか? さらに詳しく:「コメントの追加」ボタンを押して、TinyMCE javascriptファイルをロードし(すべてのTinyMCEを1つのJSファイルにまとめました)、tinyMCE.init(...)を呼び出します。 誰もが「コメントを追加」をクリックするわけではないので、最初のページのロード時にこれをロードしたくありません。 私ができることは理解しています: $("#addComment").click(function(e) { document.write("<script...") }); しかし、より良い/カプセル化された方法はありますか?

9
Hibernate Open Session in Viewが悪い習慣と見なされるのはなぜですか?
そして、LazyLoadExceptionsを回避するためにどのような代替戦略を使用しますか? 表示中の開いているセッションに次の問題があることを理解しています: 異なるjvmで実行されている階層化アプリケーション トランザクションは最後にのみコミットされ、おそらく前に結果が欲しいでしょう。 しかし、アプリケーションが単一のvmで実行されていることがわかっている場合は、オープンセッションインビュー戦略を使用して痛みを和らげてみませんか?

8
ユーザーが画像をスクロールして表示するときに、動的に(または遅延して)画像を読み込む方法
私は、これが多数の「モダン」ウェブサイト(facebookやgoogle画像検索など)で気づきました。この場合、スクロールせずに見える画像は、ユーザーがページを下にスクロールして表示可能なビューポート領域(ソースを表示すると、X個の<img>タグがありますが、サーバーからすぐにフェッチされません)。この手法は何と呼ばれ、どのように機能し、いくつのブラウザで機能します。そして、最小限のコーディングでこの動作を実現できるjQueryプラグインがあります。 編集する おまけ:HTML要素に「onScrolledIntoView」または同様のイベントがあるかどうか誰かが説明できますか。そうでない場合、これらのプラグインはどのように機能しますか?

11
Hibernate:すべてのレイジーコレクションをプルするためのベストプラクティス
私が持っているもの: @Entity public class MyEntity { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "myentiy_id") private List<Address> addreses; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "myentiy_id") private List<Person> persons; //.... } public void handle() { Session session = createNewSession(); MyEntity entity = (MyEntity) …

13
遅延読み込みとは何ですか?
遅延読み込みとは何ですか? [いくつかの回答を読んで編集してください]なぜ人々はこの用語をそれほど頻繁に使用するのですか? ASP / ADOレコードセットを使用して、グリッドビューのデータまたはADO.NETデータソースをロードするとします。 なぜ人々がレイジーローディングという用語を使用するのか、「他の」タイプは何ですか?


3
Hibernateの遅延ロードアプリケーションの設計
私はHibernateをSpringフレームワークと組み合わせて使用する傾向があり、それは宣言型のトランザクション境界機能(@Transactionalなど)です。 誰もが知っているように、休止状態はできるだけ非侵襲的で透明性を保つように努めていますが、関係を採用する場合、これは少し難しいことがわかりますlazy-loaded。 透明度のレベルが異なるデザインの選択肢がいくつかあります。 関係を遅延ロードしないようにします(例: fetchType=FetchType.EAGER) これは、遅延読み込みのアイデア全体をバイオライトします。 を使用してコレクションを初期化する Hibernate.initialize(proxyObj); これは、DAOへの比較的高い結合を意味します でインターフェースを定義することはできますがinitialize、他の実装が同等のものを提供することは保証されていません。 永続Modelオブジェクト自体にトランザクション動作を追加します(動的プロキシまたはを使用@Transactional) @Transactionalが永続オブジェクト自体で機能するようには見えませんでしたが、動的プロキシアプローチを試したことはありません。おそらくその休止状態が原因で、プロキシでの操作が行われています。 トランザクションが実際に行われているときの制御の喪失 両方の怠惰/非怠惰なAPIを提供し、例えば、loadData()およびloadDataWithDeps() アプリケーションに、どのルーチンをいつ使用するかを強制的に認識させます。これも密結合です。 メソッドオーバーフローloadDataWithA()、、 ....、loadDataWithX() byId()操作 のみを提供するなどして、依存関係のルックアップを強制します 非オブジェクト指向のルーチン、例えば、の多くを必要とfindZzzById(zid)し、その後getYyyIds(zid)の代わりに、z.getY() トランザクション間に大きな処理オーバーヘッドがある場合は、コレクション内の各オブジェクトを1つずつフェッチすると便利です。 DAOだけでなく、アプリケーションの一部を@Transactionalにします。 ネストされたトランザクションに関する考えられる考慮事項 トランザクション管理に適合したルーチンが必要です(例:十分に小さい) プログラムによる影響は小さいが、トランザクションが大きくなる可能性がある DAOに動的フェッチプロファイルを提供します。loadData(id, fetchProfile); アプリケーションは、いつ使用するプロファイルを知っている必要があります AoPタイプのトランザクション。たとえば、操作をインターセプトし、必要に応じてトランザクションを実行します。 バイトコード操作またはプロキシの使用が必要 トランザクションが実行されるときの制御の喪失 いつものように、黒魔術:) オプションを逃しましたか? lazy-loadedアプリケーション設計における関係の影響を最小限に抑えるために、どのアプローチをお勧めしますか? (ああ、WoTでごめんなさい)

3
Webpackで、スクリプトを評価せずにインポートするにはどうすればよいですか?
私は最近、いくつかのウェブサイト最適化作業に取り組んでおり、次のようなimportステートメントを使用して、webpackでコード分割を使用し始めます。 import(/* webpackChunkName: 'pageB-chunk' */ './pageB') これでpageB-chunk.jsが正しく作成されます。ここで、このチャンクをpageAでプリフェッチしたいとします。これを行うには、次のステートメントをpageAに追加します。 import(/* webpackChunkName: 'pageB-chunk' */ /* webpackPrefetch: true */ './pageB') その結果、 <link rel="prefetch" href="pageB-chunk.js"> HTMLの先頭に追加されると、ブラウザはそれをプリフェッチします。 問題は、私がここで使用するインポートステートメントであり、jsファイルをプリフェッチするだけでなく、jsファイルを評価します。つまり、そのjsファイルのコードが解析されてバイトコードにコンパイルされ、そのJSの最上位コードが実行されます。 これはモバイルデバイスでの非常に時間のかかる操作であり、最適化したいのですが、プリフェッチ部分だけが必要です。評価と実行の部分は必要ありません。後でユーザーインタラクションが発生したときに解析がトリガーされるためです。自分を評価する 私は最初の2つのステップをトリガしたい↑↑↑↑↑↑↑↑、写真から来https://calendar.perfplanet.com/2011/lazy-evaluation-of-commonjs-modules/ ↑↑↑↑↑↑↑ ↑↑ 確かに私はプリフェッチリンクを自分で追加することでこれを行うことができますが、これはプリフェッチリンクに配置する必要があるURLを知る必要があることを意味します、webpackはこのURLを確実に知っています。 これを達成する簡単な方法はありますか?

1
ネストされたルートに移動するときにReactの遅延読み込みを使用すると、メインバンドルが読み込まれません
私使用していますが、コンポーネント遅延ロードとしてのWebPACKを使用してルータに反応バンドラ私がホームページにアクセスすると、/ 私はそれをネットワーク]タブで見ることができる bundle.jsロードされ、また、私は、サイドバーの対応コンポーネントで特定のアイテムをクリックしたときたとえば0.bundle.js、ファイル名が正常に読み込まれますが、検索バーからネストされたルート(例http://127.0.0.1:8080/forms/select)に直接移動すると、次のようなエラーが発生します。 GET http://127.0.0.1:8080/forms/bundle.jsnet :: ERR_ABORTED 404(見つかりません) このエラーは、bundle.jsがロードされていないことを示しています。つまり、他のチャンクをロードできません。 webpack.config.js const webpack = require('webpack'); module.exports = { entry: './src/index.js', module: { rules: [], }, resolve: { extensions: ['*', '.js', '.jsx'], }, output: { path: __dirname + '/dist', publicPath: '/', filename: 'bundle.js', }, plugins: [new webpack.HotModuleReplacementPlugin()], devtool: 'cheap-module-eval-source-map', devServer: { contentBase: …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.