Bonjour à tous,

J'ai la méthode suivante :
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);
    }
Les objets trouvés sont donc mis en cache ; jusque là rien de particulier.

Mais je souhaite sortir au cas par cas certains éléments du cache, j'ai donc écrit :
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);
    }
Ç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 !
En scannant le code de Spring, je tombe sur le code suivant :
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);
}
Cela semble confirmer mon premier élan : l'éviction peut concerner une clef. Non ? Je me trompe peut-être dans mon analyse...
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.