1

サービスメソッドはこのようなオブジェクトを返します

return entityManager.find(Event.class, id);

@ViewScoped Bean の内部

Event オブジェクトには約 40 のフィールドがあり、そのうちのいくつかは @ManyToMany にマップされています。

JavaScript を使用して PrimeFaces ダイアログを開くと、Hibernate は初期ページの生成に使用したのと同じクエリをすべて実行します。Bean を呼び出すページで何かを行うたびに、Hibernate はすべてのクエリをもう一度実行します。それだけでなく、同じ SELECT クエリがログで何十回も繰​​り返されます。FetchType を EAGER から LAZY に変更しようとしましたが、変更はありませんでした。オブジェクトを永続化コンテキストから切り離そうとしましたが、遅延コレクションがロードされませんでした。Google で徹底的に検索した後、関連する質問を見つけることができませんでした。さらに、Hibernate は実際には例外をスローしていません。情報が既にメモリにロードされた後、不必要にデータベースにクエリを実行しているため、実行速度が遅いだけです。

途中で間違って行った簡単なことがあると思っています.StackOverflowの素晴らしい人々が私を正しい方向に向けることができることを望んでいました。

ここに十分な情報が含まれていない場合は、解決を容易にするために必要な関連データを求めてください。

4

1 に答える 1

0

サーバー側には、休止状態が取得したものをキャッシュする原因となるものは何もありません。したがって、サーバーへのすべてのリクエストは、関連するオブジェクトを取得する休止状態になります。これを減らしたい場合は、2 番目のレベルのキャッシュを使用できます。次に、PK による取得がキャッシュされます。

クラスターで使用する場合、二次キャッシュにはクラスター化されたキャッシュ ソリューションが必要になることに注意してください。

于 2013-01-18T16:46:04.287 に答える