質問: Spring Data JPAを利用しているのですが、 キャッシュが働いている模様で(おそらくエンティティキャッシュ)最新の情報を取得できません。 キャッシュを無効化する方法についてご存知の方、何卒ご教示をお願い致します。 利用ライブラリ ・hibernate-jpa-2.1-api-1.0.2.Final.jar (Spring Data JPAのJPA実装はデフォルト指定のためhibernateを利用しています) ・spring-boot-starter-data-jpa-2.0.3.RELEASE.jar 動作確認コード ``` HogeEntity entity; entity= hogeEntityRepository.findById(1).get(); log.info(entity.getData()); // (1) try { Thread.sleep(10000); } catch (InterruptedException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } entity= hogeEntityRepository.findById(1).get(); log.info(entity.getData()); // (2) ``` (1)取得後、Sleep中に裏で直接データ更新。 しかし(2)で取得したデータが更新前のデータとなる。
回答: 一時的にキャッシュをクリアしてDBにアクセスさせる場合は、EntityManager#clear()メソッドを呼べばよいかと思います。 コメントに対する追記 動かして確認してはいないので、関連しそうなサイトの提示しか出来ませんが、Entity単位で@Cacheableアノテーションで制御する方法とEntityManagerの生成時にプロパティにより設定する方法があるようです。 * Stackoverflow - JPA 2.0 vs. javax.persistence.sharedCache.mode * キャッシュ