2016-10-26 5 views
0

名前付きクエリを持つエンティティがあります。eclipselink query-results-cacheが機能しません

@Entity(name = "MyEntity") 
@Table(name = "mytable") 
//@ReadOnly 
@NamedQueries({ 
@NamedQuery(
     name = "exampleFind", 
     query = "[..]", 
hints = {@QueryHint(name= QueryHints.QUERY_RESULTS_CACHE, value= "TRUE")}) 
}) 
@Cacheable 
@Cache(type = CacheType.FULL) 
public class MyEntity { 

私は@ReadOnlyで、このクラスに注釈を付けた場合、このクエリはデータベースにヒットしません(結果のみキャッシュを使用しています)が、私は@ReadOnly注釈を削除すると、それは常にデータベースにSQLを実行します。

@ReadOnlyなしでこのキャッシュを有効にするにはどうすればよいですか?結果キャッシュに制限はありますか?私は、我々のアプリケーションでのEclipseLink 2.4.1

答えて

0

を使用

我々はいくつかのトラブルにも動作するようにクエリキャッシュを取得していました。エンティティとクエリ結果がキャッシュされていることを確認する必要があります。

は、私たちにとって、それは我々が共有キャッシュ・モードを設定すると動作しますpersistence.xmlDISABLE_SELECTIVEに:私たちは私たちのエンティティのためにしたいキャッシングのタイプを設定する@Cacheを使用し、これと一緒に

<shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode> 

。いくつかのためにそれを無効にするには@Cacheable(false)

developers manualによれば、この設定は実際にはデフォルトであるため、現在の設定を削除することも有効です。

+0

ありがとうございました。残念ながら、それは助けにはならない。キャッシュが有効になっているか、いつ更新されているかを確認するために、eclipselinkのキャッシュを記録/監視するオプションはありますか?おそらくこのキャッシュは毎回無効になります。これがデータベースへのSQLクエリが常にある理由です。 – Mario

+0

個々のオブジェクトが共有キャッシュにキャッシュされているかどうかを尋ねることができます。 。これは、IdentityMapAccessor:https://wiki.eclipse.org/EclipseLink/Examples/JPA/Cachingを使用して行うことができます。パフォーマンスの測定はまだまだたくさんありますが、まだ試したことがありません。また、persistence.xmlでeclipselinkのログを細かい詳細に設定することもできます – Thirler

関連する問題