今日は細かいテストをしていて「あれ?」という挙動があり、詳しく追っていった所、EclipseLinkのキャッシュ関連でした。そしてずっとハマっていました(-_-;
本当はスモールな再現コードを作ってのせようと思ったのですが、時間が足りず作れていないので、とりあえずメモだけ。
金魚本にもありますが、JPAには
とあるとのことです。
恥ずかしながら、この辺りをあまり細かく意識できていなかったのですが…今日ハマった挙動がイマイチ理解できなかったため、EclipseLinkのCache解説のページをみながら「ちゃんと理解せんと…」と少しゲンナリしてます(-_-;
http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching
今日ハマった現象は、上記の中でevictAll()を呼んだり、ヒントクエリ(という呼称でいいのかな…?)を付与してみたら解消したので、不具合時の内部イメージと、なぜこれらを呼んで解決するのか、を理解していきたいと思います。
Cache cache = getEntityManager().getEntityManagerFactory().getCache();
if(cache != null){
cache.evictAll();
}
Query qry = em.createQuery(query);
qry.setHint("javax.persistence.cache.storeMode", "REFRESH");
がんばらねば。。