2017-09-13 9 views
1

私は@NamedQueryを使用しています。私のデータベースからいくつかの結果を得るためです。しばらくそれを操作した後、私は、&がアプリケーションが展開された後でより多くのパフォーマンスのためにキャッシュに格納されたら、@NamedQueryが要求されることを理解しました。@NamedQueryキャッシュ可能な結果代替

私はリクエストが行われたときに常にデータベースから情報を取得する方法(種類のクエリ)を探していますので、常に更新されたデータを取得できますか? そのようなことをする方法があれば、そのパフォーマンスはどうですか?

+0

という名前のクエリは(SQLの中に)一度コンパイルされます。 JPAプロバイダ固有のクエリRESULTSキャッシングをオンにしない限り、常に実行する必要があります。しかし、 – DN1

+0

@ DN1を有効にしたものは定義していません。どこでこのような設定を見つけることができますか?私は設定をしなかったので! –

+1

EMFを定義したので、「何らかの」設定を行いました。あなたはLOGを持っているので、どのSQLが呼び出されたかを見ることができます。 – DN1

答えて

1

コメントに既に説明されているように、あなたはNamedQueryを誤解しています。結果はキャッシュには格納されませんが、問合せSQLは格納されます。

それでも時々のEntityManagerは、いくつかのことをキャッシュし、私はあなたがそのためのソリューションが必要と思います....

あなたは、クエリオブジェクト(例えばEntityManager.createNamedQuery(「nameOfYourQuery」))と協力し、EclipseLinkをしている場合次の操作を行うことができます

Query query = EntityManager.createNamedQuery("nameOfYourQuery"); 
query.setHint(QueryHints.REFRESH, HintValues.TRUE); 
query.getResultList(); 

ます。また、セットアップクエリは、このようNamedQueryに直接ヒントすることができます

@NamedQuery(name = "something", query = "SELECT n FROM something", 
[email protected](name=QueryHints.REFRESH, value=HintValues.TRUE)) 

別の方法wiは第クエリヒントは、この1のようになります。

可能クエリヒントのリストについては
query.setHint(QueryHints.CACHE_USAGE, CacheUsage.DoNotCheckCache); 

the EclipseLink docsを見ています。

あなたは完全にデータベース結果のキャッシュを無効にしたい場合はまた、あなたのpersistence.xmlに次のように試すことができます。

<property name="eclipselink.query-results-cache" value="false"/> 
+1

これは私が探していたものです、私は経験豊富な同僚との問題について議論しました。彼は私に同じ説明をしますが、技術的な詳細はありません。 –

関連する問題