Sto lavorando con la Primavera e EHCacheCome aggiornare/rimuovere un elemento già memorizzato nella cache all'interno di una collezione di oggetti
ho il seguente metodo
@Override
@Cacheable(value="products", key="#root.target.PRODUCTS")
public Set<Product> findAll() {
return new LinkedHashSet<>(this.productRepository.findAll());
}
Ho altri metodi di lavoro con @Cacheable e @CachePut e @CacheEvict.
Ora, immaginate il database restituisce 100 prodotti e sono memorizzati nella cache attraverso key="#root.target.PRODUCTS"
, poi altro metodo sarebbe inserto - aggiornamento - cancellato un elemento nel database. Pertanto i prodotti memorizzati nella cache tramite lo key="#root.target.PRODUCTS"
non sono più gli stessi come il database.
Voglio dire, controllare i due seguenti due metodi, sono in grado di aggiornare/eliminare un elemento, e che stesso elemento viene memorizzato nella cache nell'altra key="#root.target.PRODUCTS"
@Override
@CachePut(value="products", key="#product.id")
public Product update(Product product) {
return this.productRepository.save(product);
}
@Override
@CacheEvict(value="products", key="#id")
public void delete(Integer id) {
this.productRepository.delete(id);
}
Vorrei sapere se è possibile aggiorna/cancella l'oggetto che si trova nella cache attraverso lo key="#root.target.PRODUCTS"
, sarebbe 100 con il Prodotto aggiornato o 499 se il Prodotto è stato cancellato.
Il mio punto è, voglio evitare i seguenti:
@Override
@CachePut(value="products", key="#product.id")
@CacheEvict(value="products", key="#root.target.PRODUCTS")
public Product update(Product product) {
return this.productRepository.save(product);
}
@Override
@Caching(evict={
@CacheEvict(value="products", key="#id"),
@CacheEvict(value="products", key="#root.target.PRODUCTS")
})
public void delete(Integer id) {
this.productRepository.delete(id);
}
Non voglio chiamare di nuovo i 500 o 499 prodotti da memorizzare nella cache in key="#root.target.PRODUCTS"
è possibile fare questo? Come?
Grazie in anticipo.
Grazie Stephane, sto andando a mantenere la conversazione attraverso JIRA. –