GAE でレベル 2 キャッシュ (jcache/memcache) を有効にした JPA2 を使用しています。いくつかの更新トランザクションを実行する必要があり、キャッシュされたデータではなくデータストア データに依存するようにしたいと考えています。JPA の find メソッドを使用するときに、javax.persistence.cache.retrieveMode プロパティを「BYPASS」に設定しようとしましたが、まったく機能していないようです。では、datanucleus JPA2 でキャッシュ バイパスが可能でしょうか?
コードサンプル:
if (bypassCache) {
return find(className, Collections.Collections.<String,Object>singletonMap("javax.persistence.cache.retrieveMode",CacheRetrieveMode.BYPASS));
}
else return find(className);
私は datanucleus 3.1.3 と appengine 1.7.7.1 を使用しています。
ありがとう !
datanucleus のソース コードを読んだ後、現在、find メソッドに対して JPA キャッシュ バイパスが実装されていないことがわかりました。誰でも確認できますか?
実際、設定したプロパティに関係なく、EntityManager.find() メソッドは常に L2 キャッシュされているようです。JPQL クエリを実行しましたが、クエリ結果が L2 キャッシュされません。(デフォルトでは datanucleus.query.results.cached は false です)。私の理解では、L2 キャッシュを細かく制御するにはクエリを使用する必要があります。