Весна вложенная @CacheEvict - PullRequest
       8

Весна вложенная @CacheEvict

0 голосов
/ 14 апреля 2020

Предположим, у меня есть эти два класса:

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. Как я могу это сделать? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...