Предположим, у меня есть эти два класса:
public class A implements Serializable {
...
public B b;
public String name;
}
public class B implements Serializable {
...
public int value;
}
И у меня есть две службы:
@Service
public class ServiceA {
@Autowired
ServiceB serviceB;
@Cacheable(cacheNames = "cacheA")
public A createA(int bId, String name){
A a = new A();
B b = serviceB.findById(bId);
a.setName(name);
a.setB(b);
return a;
}
}
@Service
public class ServiceB {
@Cacheable(cacheNames = "cacheB")
public B findById(int id) {
return repositoryB.findById(id);
}
@CacheEvict(cacheNames = "cacheB")
public void incrementValueById(int id){
B b = repositoryB.findById(id);
b.value++;
repositoryB.save(b);
}
}
И затем я вызвал метод createA (1, "some name") из ServiceA и получил это кешируется в cacheA:
{
"name": "some name",
"b": {
"value": 0
}
}
И в кеше cacheB я получил:
{
"value": 0
}
Если я вызываю incrementValueById из ServiceB, я очищаю cacheB, и когда я вызываю findById из ServiceB, Я получаю и кеширую обновленные данные. Я также хочу очистить кеш кеша, потому что теперь он содержит устаревшие данные B. Как я могу это сделать? Спасибо!