Bonjour à tous,
J'ai la méthode suivante :
Les objets trouvés sont donc mis en cache ; jusque là rien de particulier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 @Cacheable("my-cache") public MyCLass findById(String myId) { return em.find(MyCLass.class, myId); }
Mais je souhaite sortir au cas par cas certains éléments du cache, j'ai donc écrit :
Ça ne fonctionne que si j'ajoute "allEntries=true" ; mais ça me pose un vrai problème conceptuel... je ne veux pas vider tout mon cache pour un seul élément !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 @CacheEvict(value="my-cache") public void remove(MyCLass entity) { entity.setRemoved(true); em.persist(entity); }
En scannant le code de Spring, je tombe sur le code suivant :
Cela semble confirmer mon premier élan : l'éviction peut concerner une clef. Non ? Je me trompe peut-être dans mon analyse...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 if (evictOp.isCacheWide()) { cache.clear(); if (log) { logger.trace("Invalidating entire cache for operation " + evictOp + " on method " + context.method); } } else { // check key if (key == null) { key = context.generateKey(); } if (log) { logger.trace("Invalidating cache key " + key + " for operation " + evictOp + " on method " + context.method); } cache.evict(key); }
En tout cas, j'essayé de faire un "return entity;" pour voir, mais la doc indique bien que les retours ne sont pas pris en compte par @CacheEvict, de toute façon.
Merci d'avance, Thomas.
Partager