問題タブ [lazy-initialization]
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.
c# - LazyInitializer.EnsureInitializedを実行しますスレッドセーフの明確な約束がありますか?
プロパティインジェクションでテストできるレイジープロパティを作成したいと思います。レイジーフィールドを使用する場合、テスト中に自分のフィールドをどのように注入できるかわかりません。これが私のコードです:
このコードがスレッドセーフであるというBCLチームからの約束があるかどうか疑問に思っていますか?ドキュメントからは明らかではありませんでした。
java - Hibernate LazyInitializationExceptions を回避するためのアーキテクチャ
私は自分のプロジェクトの始まりです。そのため、Hibernate LazyInitializationExceptions を回避するアーキテクチャを設計しようとしています。これまでのところ、私の applicationContext.xml には次のものがあります。
hibernate.cfg.xml:
Role.java:
そして User.java:
HibernateEMSDao には、データベースからユーザーを保存およびロードするための 2 つの方法があります。
今、次のように実装した場合にテストしましたHibernateEMSDao#getUser
:
LazyInitializationExcaption を取得しています - セッションが閉じられています。しかし、最初の方法はうまく機能しています。したがって、近い将来、この例外を回避するための提案が必要です。どんな小さな情報でも価値があります。
ありがとうございます。
注:サーバーを再起動した後、そのエラーが発生しました。
編集:コードが追加されました:
spring - レイジーアプリケーションリスナー
クラスに追加ApplicationListener
すると、Spring は Bean を積極的にインスタンス化します (おそらく、Bean がすべてのイベントを確実に取得するようにするためです)。
私の場合、「CacheFlush」イベントをリッスンする Bean があります (つまり、いくつ見逃してもかまいません)。
ApplicationEvent
Spring 3.0 で遅延リスナーを実装するにはどうすればよいですか?
objective-c - 間違ってコーディングされた遅延初期化がうまく機能する
意図的にコード化された怠惰な初期化:
それにもかかわらず、以下の生成されたコードシーケンスによる「正しいこと」はありますか?
- テストのために prop を rax にロードする
- いずれにせよraxを返す
hibernate - JSF での JPA エンティティの使用。LazyInitializationException を防ぐための最良の戦略はどれですか?
JSF UI から JPA エンティティを編集するベスト プラクティスについて、専門家の意見を聞きたいです。
それで、問題について一言。
永続化されたオブジェクトがMyEntity
あり、それをフェッチして編集するとします。私が使用するDAOレイヤーで
MyEntity
「親」エンティティのプロキシを持つインスタンスを返します-そのうちの1つがMyParent
. MyParent
へのプロキシ グリーティングとして取得されます@Access(AccessType.PROPERTY)
:
そして MyEntity はそれへの参照を持っています:
ここまでは順調ですね。UI では、値オブジェクトを作成せずにフェッチしたオブジェクトを直接使用し、選択リストで親オブジェクトを使用します。
すべて正常にレンダリングされ、何もLazyInitializationException
発生しません。しかし、オブジェクトを保存すると、
MyParent
プロキシsetId()
メソッドについて。
MyParent
関係を変更すると、問題を簡単に修正できますEAGER
またはを使用してオブジェクトをフェッチしますleft join fetch p.myParent
(実際、それが私が今行っている方法です)。この場合、保存操作は正常に機能し、リレーションは新しいMyParent
オブジェクトに透過的に変更されます。追加のアクション (手動コピー、手動参照設定) を実行する必要はありません。非常にシンプルで便利です。
しかし。オブジェクトem.find()
が10 個の他のオブジェクトを参照している場合、10 個の追加の結合が発生します。これは、特に参照オブジェクトの状態をまったく使用しない場合、適切なデータベース操作ではありません。必要なのは、オブジェクトの状態ではなく、オブジェクトへのリンクだけです。
これは世界的な問題です。JSF スペシャリストがアプリケーションで JPA エンティティをどのように処理しているかを知りたいと思います。これは、余分な結合とLazyInitializationException
.
拡張永続コンテキストは私には適していません。
ありがとう!
java - ダブルチェックされたロックと null 処理を備えた LazyReference
私はLazyReference
クラスを数年間使用しています(もちろん定期的にではありませんが、非常に役立つ場合もあります)。クラスはここで見ることができます。クレジットは、Robbie Vanbrabant (クラス作成者) と Joshua Bloch の著名な「Effective Java 2nd edt」に贈られます。(元のコード)。
クラスは (Java 5+ で) 正しく動作しますが、潜在的な問題が 1 つあります。instanceProvider
返された場合(Guiceの契約null
に従ってはいけませんが…)、メソッドを実行するたびに LOCK が保持され、何度も呼び出されます。契約を破った人には良い罰のように見えますが (he-he)、値を設定する可能性のあるフィールドを遅延して初期化する必要がある場合はどうすればよいでしょうか?Provider.get()
LazyReference.get()
instanceProvider.get
null
LazyReference を少し変更しました。
私見は問題なく動作するはずです(別の意見がある場合は、コメントや批判を投稿してください)。しかし、ブール値volatile
から修飾子を削除するとどうなるでしょうか(もちろんそのままにしておきます)。それでも正しく動作しますか?isNull
instance
java - LazyInitializationExceptionをより適切に回避する方法は?
現在、@ManyToOne
親エンティティに関連付けられている子エンティティがあります。以前の開発者はlazy="false"
、セッションが閉じられたときに必要なときにいつでも親を取得するようにこのフィールドを設定しましたlazy="true"
が、常に使用されるとは限らないため、そうする必要があると判断しましたが、そうするとLazyInitializationException
、セッションが閉じられ、子が親を取得しようとしたときのセッション。
run
以下に示すように、メソッドのロジックをsと相互作用するサービスクラスに移動するのが正しいかどうか疑問に思っていました。したがって、現在、サービスクラスは、必要なsが挿入されDAO
たプレーンクラスのようなものであり、単に呼び出すだけなので、例外を回避できます。メソッドと結果を返しますDAO
。DAO
エンティティと対話するサービスクラスにもっと多くのメソッドを配置する必要があります。これにより、ユーザーが取得され、ログインアクションのすべてがチェックされ、必要に応じて親が取得され、ログイン結果がrun
メソッドに返されます。
私はSpringを使用<tx:advice>
して、クロージングやその他のトランザクション関連のものを処理します。
c#-4.0 - C# 4.0でのlazy機能の使い方について
以下のような Userdetails クラスがあります
ここで Address は、次のようなパブリック フィールドを持つ別のクラスです。
ここで、ユーザーがアプリにログインすると、Userdetails オブジェクトを作成します。現在、userdetails 内でアドレス オブジェクトを頻繁に使用することはありませんが、データは取得しています。
このシナリオでは、C# 4.0 の遅延初期化機能をどのように使用できますか。
データは直接の db クエリから取得され、これらのクラスにはデータを取得するためのコンストラクターやその他の手段がないことに注意してください。これらは、C# でのデータベース フィールドの単なる表現です。
ここで遅延初期化を使用する最良の方法を提案してください。
x86 - 静的ストレージ(主にデータセグメント)はセグメンテーション違反を引き起こす可能性がありますか?
static
ストレージはコンパイル時に決定されます。ただし、関数に遅延初期化がたくさんあるシナリオを考えてみましょう。
ここではコーディングの実践についてではなく、技術的な側面について説明します。のような他の多くの関数 foo()
が実行されると、それらの多くのstatic
変数がデータセグメントに導入されます。
コンパイラは、データセグメントにスペースを割り当てるときに、アカウントでも遅延初期化を行いますか。「いいえ」の場合、コードの実行中に実行時にセグメンテーション違反が発生しますか?(メソッド内に多くのstatic
データがある場合に発生する可能性が高くなりtemplate
ます)。