2017-10-19 26 views
-1

J'ai la méthode findAll qui me renvoie tous les objets dans DB et il est mis en cache. Mais quand je mets à jour un objet, je veux mettre à jour cet élément dans le cache. Mais findAll je ne sais pas comment la carte avec la clé:Comment faire pour supprimer un objet spécifique du cache sur la méthode findAll?

@Cacheable("findAllStudens") 
public Collection<StudensImpl> findAll() 

Lorsque je mets à jour l'étudiant que je veux mettre à jour le cache, mais seulement pour cet élément. Est-ce que quelqu'un a le même problème?

Répondre

0

Vous devez utiliser la @CachePut d'annotation sur votre méthode de mise à jour, comme ceci:

@CachePut(cacheNames = "findAllStudens") 
public void update(StudensImpl studensImpl) { 
... 
} 
+0

est le moyen de mettre à jour uniquement cet objet dans le cache? –

0

vous devez ajouter une annotation @CacheEvict (« de findAllStudens ») avant votre méthode de mise à jour

annotation CacheEvict supprimera les données du cache existant. Et la prochaine fois que vous appelez findAll() le code à l'intérieur de la méthode sera exécuté et la liste retournée sera stockée sur votre cache

+0

oui, mais est-ce supprimer tout cache findAllStudens? –

+0

Je ne l'utilise jamais mais il semble que @CachePut fasse le travail (réponse Felipe) http://websystique.com/spring/spring-4-cacheable-cacheput-cacheevict-caching-cacheconfig-enablecaching-tutorial/ –

+0

@ cachePut réécrira le cache avec une nouvelle valeur car la clé est le nom de la méthode et la valeur est un nouvel objet. –