1

我正在使用 Spring 的缓存工具。当我调用以下方法时,我想清除数组中所有值的缓存receiptObject.resolverIds

@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);
}

在这里,我只使用了第一个元素,但我想将其推广到数组中的所有元素。我该怎么做?

4

1 回答 1

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);
    }
}
于 2014-10-21T07:23:12.320 回答