Как обновить / удалить элемент, уже кэшированный в коллекции элементов
Я работаю с Spring и EhCache
У меня есть следующий метод
@Override
@Cacheable(value="products", key="#root.target.PRODUCTS")
public Set<Product> findAll() {
return new LinkedHashSet<>(this.productRepository.findAll());
}
У меня есть другие методы, работающие с @Cacheable и @CachePut и @CacheEvict.
Теперь представьте, что база данных возвращает 100 продуктов, и они кэшируются черезkey="#root.target.PRODUCTS"
тогда другой методвставить - обновить - удалить элемент в базу данных. Поэтому продукты кэшируются черезkey="#root.target.PRODUCTS"
уже не такие, как база данных.
Я имею в виду, проверьте два следующих двух метода, они могут обновить / удалить элемент, и чтотот же предмет кэшируется в другом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);
}
Я хочу знать, если возможно обновить / удалить элемент, расположенный в кеше черезkey="#root.target.PRODUCTS"
, это будет 100 с обновленным продуктом или 499, если продукт был удален.
Я хочу избежать следующего:
@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);
}
Я не хочу перезванивать 500 или 499 продуктов для кэширования вkey="#root.target.PRODUCTS"
Возможно ли это сделать? Как?
Заранее спасибо.