So aktualisieren / entfernen Sie ein Element, das bereits in einer Elementsammlung zwischengespeichert ist
Ich arbeite mit Spring und EhCache
Ich habe die folgende Methode
@Override
@Cacheable(value="products", key="#root.target.PRODUCTS")
public Set<Product> findAll() {
return new LinkedHashSet<>(this.productRepository.findAll());
}
Ich habe andere Methoden, die mit @Cacheable und @CachePut und @CacheEvict arbeiten.
Stellen Sie sich vor, die Datenbank gibt 100 Produkte zurück und diese werden zwischengespeichertkey="#root.target.PRODUCTS"
, dann würde andere MethodeEinfügen - Aktualisieren - Löschen ein Element in die Datenbank. Daher werden die Produkte durch die zwischengespeichertenkey="#root.target.PRODUCTS"
sind nicht mehr die gleichen wie die Datenbank.
Ich meine, überprüfen Sie die beiden folgenden zwei Methoden, sie sind in der Lage, ein Element zu aktualisieren / löschen, und dasgleicher Artikel ist in der anderen zwischengespeichertkey="#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);
}
Ich möchte wissen, ob es möglich ist, das im Cache befindliche Objekt über das zu aktualisieren / löschenkey="#root.target.PRODUCTS"
Wenn das Produkt aktualisiert wird, sind es 100 oder 499, wenn das Produkt gelöscht wird.
Mein Punkt ist, ich möchte Folgendes vermeiden:
@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);
}
Ich möchte nicht, dass die 500 oder 499 Produkte erneut im Cache zwischengespeichert werdenkey="#root.target.PRODUCTS"
Ist das möglich? Wie?
Danke im Voraus.