@persistenceContext(type = persistenceContextType.extended)を使用している間、1レベルのキャッシュの問題を避けます
質問
DAOクラスで@PerSistECONTEXT(type = persipenceContextType.extended)を構成しました。ビューレイヤーで怠zyな読み込みを取得します(このためにセッションを閉じないために必要です)が、1レベルのキャッシュの問題が発生しています(想像します) ..オブジェクトは、2番目のレベルのキャッシュ設定がオフであってもキャッシュされているためです。 「type = persipenceContextType.extended」をオフにした後、システムはオブジェクトをキャッシュするのではなく、怠zyなロードの問題に再び潜りました。
//@persistenceContext(Type=PersistenceContextType.extended)
@persistenceContext private entitymanager entitymanager;
これを制御する方法はありますか?私は本当に怠zyなロードが必要ですが、毎回1レベルのキャッシュにオブジェクトを保存したくありません。
ありがとう
解決
拡張された永続性のコンテキストを本当に使用し、それが何を意味するのか本当に理解したいのでなければ(私はペダンチックであることを意味しませんが、これは拡張エンティティマネージャーが異なるスレッド、ライフサイクル、およびメモリ管理セマンティクスを持っているため重要です)通常を使用するには OEIV(視界内のオープンエンティティマネージャー)パターン あなたの怠zyなロードの問題を解決するため。
Springは、このパターンの2つの実装をフィルターで提供します(OpenEntityManagerInViewFilter
)およびインターセプター(OpenEntityManagerInViewInterceptor
)。 Javadocから:
「オープンエンティティマネージャーのビュー」パターンを目的としています。つまり、元のトランザクションがすでに完了しているにもかかわらず、Webビューでの怠zyなロードを可能にします。