アプリケーションの存続期間中、できれば初めて呼び出された後、キャッシュしたい状態のコレクションがあります。永続性プロバイダーとしてEclipseLinkを使用しています。私のEJB3エンティティには、次のコードがあります。
@Cache
@NamedQueries({
@NamedQuery(
name = "State.findAll",
query = "SELECT s FROM State s",
hints = {
@QueryHint(name=QueryHints.CACHE_USAGE, value=CacheUsage.CheckCacheThenDatabase),
@QueryHint(name=QueryHints.READ_ONLY, value=HintValues.TRUE)
}
)
})
ただし、これは何も実行しないようです。MySQLに送信されるSQLクエリを監視すると、SessionBeanがこのNamedQueryを使用するたびに選択が実行されます。
データベースから、できればすべてのセッションで一度だけ読み取られるように、このクエリを構成する正しい方法は何ですか?
編集:私は次のようにクエリを呼び出しています:
Query query = em.createNamedQuery("State.findAll");
List<State> states = query.getResultList();