Ehcache: удаление записей из кеша, хранящихся в виде списка

Я использую абстракцию Spring 3.2 Cache с использованием ehcache в качестве реализации.

Я могу кэшировать вывод метода, который возвращает список объектов, как показано ниже.

public Class Employee
  {
       private int empId;
       private String name;

      //getters and setters
 }

@Cacheable(value = "empCache")
public List<Employee> getAllEmployess() {

        //method queries the db and returns a list of all employees

}

Но я не могу удалить конкретную запись из объекта List<Employee>, хранящегося в кеше, во время обновления или удаления через @CacheEvict, используя приведенный ниже код

@CacheEvict(value = "empCache", key="#empId")
public void deleteEmployee(int empId) {

//deletes employee object       
}   

person Dikshit Rajkhowa    schedule 29.08.2014    source источник


Ответы (1)


Взглянув на документацию Spring по абстракции кэша, то, что вы определяете с помощью @Cacheable, - это одна запись в кеше, сопоставленная с ключом SimpleKey.EMPTY. Дело в том, что ваш метод не имеет параметров. Но тогда ваш @CacheEvict определен для работы с ключом empId. Итак, у вас есть несоответствие между двумя операциями.

Однако, помимо этого несоответствия, я не верю, что то, что вы пытаетесь сделать, поддерживается абстракцией Spring Cache. Если подумать, вам нужно будет сообщить Spring, как идентифицировать сотрудника в списке на основе его empId.

person Louis Jacomet    schedule 01.09.2014