2014-10-21 6 views
0

Я использую средство кэширования Spring. Когда я звоню следующий метод, я хочу, чтобы выселить кэш для всех значений в массиве receiptObject.resolverIds:Использование содержимого для массива весной EL

@Override 
@Caching(evict = { 
     @CacheEvict(value = "assignedFeedbacks", key = "#receiptObject.resolverIds[0]"), 
     @CacheEvict(value = "newFeedbacks", key = "#receiptObject.feedbackObject.serviceId") }) 
public void addReceipt(ReceiptObject receiptObject) throws Exception { 
    feedbackDao.insertReceipt(receiptObject); 
} 

Здесь я использовал только первый элемент, но я хочу обобщить это для всех элементов в массиве , Как мне это сделать?

ответ

1

Я предполагаю, что у вас есть где-то метод @Cacheable так:

@Cacheable(value = "assignedFeedbacks") 
public void getReceipt(Object receiptId) throws Exception { 

С @Caching аннотаций можно получить сделку только с одной записью в кэше сразу, нет никаких причин, чтобы посмотреть, как SPEL может может работать с массивами, потому что key должен быть единственным объектом.

Единственный способ я вижу, на основе непосредственного использования кэша абстрагирования:

@Autowired 
private CacheManager cacheManager; 

public void addReceipt(ReceiptObject receiptObject) throws Exception { 
    feedbackDao.insertReceipt(receiptObject); 
    Cache cache = cacheManager.getCache("assignedFeedbacks"); 
    for (Object receiptId: receiptObject.getResolverIds()) { 
     cache.evict(receiptId); 
    } 
}