2017-11-07 8 views

答えて

0

アノテーションで、あなたの方法をマークする必要があります。

他のオブジェクトとの関係を持つデータベースからロードするオブジェクトがある場合、遅延読み込みでは必要なオブジェクトのみをロードでき、関連オブジェクトは必要なときにのみロードされます。

例外は、オブジェクトがデータベースセッションから切断された後に関連オブジェクトにアクセスしようとしたことによるものです(明らかに、ロードするにはdbセッションが必要です)。

状況に対応できる方法がいくつかありますが、最も適切なのはアプリケーションに完全に依存します。

オブジェクトが最初にロードされたトランザクション内で、必要なすべてのデータをロードすることができます(Hibernate.initialise、または単にゲッターを呼び出すだけで動作する場合もあります)。これにより、例外が取り除かれます。

もう1つの方法は、オブジェクトを使用する必要がある場所にIDを渡し、データベースから新しいIDを読み込み、トランザクション内で作業を行うことです。 、多くのIDを渡すことは非常にOOではありませんが、時には最適なオプションです。

たとえば、UIバインディングや「取得」するだけの場所でこのエラーが発生した場合は、遅延セッションのためのdbセッションを提供する「セッションビュー」を検討することができます。

あなたのアプリケーションとそのアーキテクチャについて知らなくても、何が最善の選択肢であるかは分かりません。

これについてさらに議論したい場合は、私にお知らせください。

0

あなたは「遅延ロードが何であるか」を尋ねるに表示されるすべての最初のここで物事のカップル、あります@Transactional

@Transactional 
void method(){ 
    Entity e = ... (from database); 
    e.getLazyField(); 
} 
+0

は機能しません –

関連する問題